2012-08-31 16 views
20

Estoy creando ramas Mercurial con nombre para nuevas características en mi aplicación, y después de terminar una característica particular, fusiono esa rama en por defecto rama, y ​​cierro esta rama de función.Cómo eliminar la rama Mercurial después de fusionar

Pero me pregunto si hay alguna manera de eliminar esas ramas nombradas por completo, sin perder los cambios que se fusionan en la rama predeterminada?

Respuesta

29

No, no hay.

Cuando ha combinado las dos ramas, la confirmación de fusión depende de la existencia de sus dos confirmaciones principales. Esto significa que no puede eliminar las confirmaciones que componen la rama fusionada, a menos que también elimine la confirmación de fusión, lo cual no quiere hacer.

Esta tampoco es la "manera Mercurial" de hacer las cosas. Cuando una rama se ha fusionado en otra rama, y ​​no se ha realizado ningún desarrollo adicional en esa rama, Mercurial reconoce que esa rama ya no está activa; hg branches pondrá esas ramas inactivas en la parte inferior de la lista. También puede cerrar una bifurcación usando hg commit --close-branch, que eliminará la bifurcación de la lista hg branches (a menos que se proporcione el parámetro -c).

Parece que debería examinar las colas Mercurial (MQ), porque esto admite un flujo de trabajo similar al que describe. Por ejemplo, puede configurar múltiples colas de MQ, y cada una de ellas representa una rama del desarrollo.

+7

Su respuesta es casi perfecto (y he upvoted se) pero @lvica debería mirar los marcadores antes de MQ. MQ es difícil. Es una verdadera herramienta de poder, y está cayendo en desgracia ahora que las fases (y pronto obsoletas) están aquí. Los marcadores, por otro lado, son perfectos para las divisiones por función, donde las ramas con nombres permanentes pueden ser excesivas. –

+0

@ Ry4an Sí, me olvidé de ellos (porque nunca los he usado). ¿Cómo se maneja la eliminación después de la fusión con marcadores? –

+1

Simplemente elimine el marcador con 'hg bookmark --delete bookmark_name'. Mucha información excelente aquí: http://mercurial.selenic.com/wiki/Bookmarks/ –

0

Idea:

Justo antes de empujar mi rama de la característica combinada con el servidor remoto, pensé: "Yo no quiero que nadie sabe de mi sucursal, preferiría que nunca existió". Así que decidí poner todos mis cambios locales en una única confirmación antes de presionar a control remoto.

Enfoque:

  1. clon origen y rama repositorios en directorio separado:

    hg clone ssh://site//hg/repository repository-origin 
    hg clone /home/user/work/repository repository-branch 
    
  2. fusión predeterminado y función sucursales dentro repositorio de la rama:

    cd repository-branch 
    hg merge feature-branch 
    hg commit -m "feature-branch: merging into default" 
    cd .. 
    
  3. crear maestro repositorio:

    hg clone repository-origin repository 
    
  4. sobrescribir todos los archivos en maestro con repositorio de la rama archivos (no ocultos):

    rsync -av --exclude=".*" repository-branch/ repository 
    
  5. fusionar todo chan ges de función rama en maestro con un solo comprometen:

    cd repository 
    hg commit -m "feature-branch: merging into default" 
    
  6. empuje a distancia

Podría ser bueno tener todo/Información algunas confirmaciones de rama no deseada dentro de la última cometer mensaje

ventajas/desventajas:

  • obras para ramas unpushed
  • calabazas se compromete juntos y pierde información
  • no requieren extensiones
Cuestiones relacionadas