2009-10-26 13 views
7

Básicamente, tengo una rama de desarrollo, y lo que me gusta hacer es crear una rama de características mientras implemento algo, y luego fusionarlo nuevamente. Así situaciones como ocurre lo siguiente¿Puede Mercurial fusionar una rama con nombre que no es una cabeza?

a 
b 
c 
d - dev 
/
e 
f - feature 

Desde dev no es una cabeza, ¿sigue siendo posible llevar dev hasta tal característica que tanto dev y función están apuntando a f?

Estoy bastante seguro de git puede hacer esto muy bien, pero parece que no puede convencer a Mercurial hacer lo mismo ...

Respuesta

19

Carl Meyer tiene razón. Usted está pensando como un usuario de git, y Mercurial maneja las cosas de manera diferente.

Podrías hacer lo que Carl sugirió y simplemente obligar al siguiente compromiso a estar en la rama de desarrollo. Personalmente, encontraría esto bastante confuso si lo viera, ya que habría una discontinuidad en la rama de desarrollo.

La forma en que se encargaría es fusionar la rama de la característica en: hg update dev && hg merge feature && hg commit -m 'Merge in the completed feature.'

Esto resultaría en un gráfico como:

a - dev 
    b - dev 
    c - dev 
    d - dev 
/| 
e | - feature 
f | - feature 
\| 
    g - dev 

Para mí, esto ilustra claramente exactamente lo que sucedió. Se bifurcó para una nueva característica y la fusionó en la rama de desarrollo cuando terminó. El hecho de que no haya otros commits en dev entretanto es solo una coincidencia y no tiene que cambiar el flujo de trabajo.

+0

Hm. He querido intentar hacer tu método, pero no recuerdo bien lo que hice mal. Quizás jugaré un poco más para ver si lo descubro. ¡Gracias tanto de ustedes! – Calyth

+0

Hm. Eso funciono. Gracias Steve! – Calyth

+0

¿Estás ejecutando ese comando en qué rama? dev? me da un error de "cruces de ramas" si se ejecuta en la función –

6

ramas nombradas en hg (a diferencia de GIT) no "punto" en cualquier sitio. Los nombres de las sucursales no son alias movibles para un rev particular. Cada confirmación tiene un marcador de metadatos que nombra la rama en la que está activada la confirmación; eso es todo.

En esta situación, si no tiene commits separados que descienden de "d" en la rama dev, entonces todo lo que necesita hacer es ejecutar "hg branch dev" y luego su siguiente commit, descendido de "f", estará de vuelta en el desarrollo de la rama. Lo cual creo que logrará los resultados que está buscando.

EDIT: Eso funcionará, pero la sugerencia de Steve Losh de hacer una fusión real dará como resultado una historia más sensata.

Cuestiones relacionadas