2009-10-26 2 views
7

Fondamentalement, j'ai dev branche, et ce que j'aime faire est de créer une branche de fonctionnalité pendant que j'implémente quelque chose, et ensuite le fusionner en arrière. Ainsi, des situations comme celle-ci se produitEst-ce que Mercurial peut fusionner une branche nommée qui n'est pas une tête?

a 
b 
c 
d - dev 
/
e 
f - feature 

Depuis dev n'est pas une tête, est-il encore possible d'apporter dev jusqu'à fonctionnalité tels que les deux dev et fonctionnalité pointent vers f?

Je suis assez sûr que git peut faire très bien, mais ne peut pas sembler convaincre Mercurial de faire de même ...

Répondre

19

Carl Meyer a raison. Vous pensez en tant qu'utilisateur git, et Mercurial gère les choses différemment.

Vous pourriez faire ce que Carl a suggéré et juste forcer le prochain commit à être sur la branche dev. Personnellement, je trouverais cela plutôt déroutant si je le voyais bien, car il y aurait une discontinuité dans la branche des dev.

La façon dont je débrouille est de fusionner la branche avec en: hg update dev && hg merge feature && hg commit -m 'Merge in the completed feature.'

Cela se traduirait par un graphique comme:

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

Pour moi, cela illustre bien exactement ce qui est arrivé. Vous avez dérivé pour une nouvelle fonctionnalité et l'avez fusionné dans la branche dev une fois terminé. Le fait qu'il n'y ait pas eu d'autre commit sur dev entre-temps n'est qu'une coïncidence et n'a pas besoin de changer le workflow.

+0

Hm. Je voulais essayer de faire votre méthode, mais je ne me souviens pas très bien de ce que j'ai fait de mal. Peut-être que je vais jouer avec un peu plus pour voir si je le découvre. Merci à vous deux! – Calyth

+0

Hm. Ça a marché. Merci Steve! – Calyth

+0

vous exécutez cette commande sur quelle branche? dev? me donne une erreur "crosses branches" si elle est exécutée sur la fonctionnalité –

6

succursales qui hg (contrairement à git) ne le font pas « point » nulle part. Les noms de branche ne sont pas des alias mobiles pour un rev particulier. Chaque commit a un marqueur de méta-donnée nommant la branche sur laquelle la validation est active; c'est tout. Dans cette situation, si vous n'avez pas de commits séparés descendant de "d" sur la branche dev, alors tout ce que vous avez à faire est d'exécuter "hg branch dev" puis votre prochain commit, descendant de "f", sera de retour sur le dév. Ce qui, je pense, permettra d'atteindre les résultats que vous recherchez.

EDIT: Cela fonctionnera, mais la suggestion de Steve Losh de faire une fusion réelle se traduira par un historique plus sensible.

Questions connexes