web-dev-qa-db-fra.com

Comment fusionner deux branches dans Mercurial lorsqu'il n'y a rien à fusionner

Je suis nouveau sur Mercurial et j'essaie de faire quelque chose de très simple mais je ne sais pas comment. J'ai créé une branche pour faire de l'expérimentation sans déranger la branche principale.

trunk       A -- B -- C
                       \
experiment              D -- E -- F

J'aime la façon dont l'expérience s'est déroulée et je veux la fusionner avec le tronc et obtenir

trunk       A -- B -- C -- D -- E -- F

Cependant, comme rien n'a été changé dans la branche "tronc", la fusion indique qu'il n'y a rien à fusionner, ce qui est assez juste. Je dois juste terminer une branche appelée "tronc". Comment puis je faire ça?

31
Danish

La fusion dans Mercurial fonctionne toujours de la manière suivante:

  1. Mettez à jour l'une des branches (voir les notes ci-dessous pour savoir pourquoi vous souhaitez choisir l'une ou l'autre et pas seulement choisir une branche aléatoire)
  2. Fusionner avec l'autre branche

Par exemple, dans votre cas, vous feriez:

hg update trunk
hg merge experiment

Choisir la bonne branche vers laquelle effectuer la mise à jour

Il y a certaines choses à considérer lors du choix de la branche à mettre à jour et à partir de laquelle fusionner, et cela a à voir avec les signets et les noms de branche.

Prenez d'abord les noms des succursales. Si vous effectuez d'abord une mise à jour vers la branche de tronc, puis fusionnez avec l'expérience, l'ensemble de modifications de fusion sera sur la branche de tronc.

Cependant, si vous effectuez une mise à jour vers la branche d'expérience, fusionnez avec le tronc, le jeu de modifications de fusion se trouvera sur la branche d'expérience.

Ceci est important à considérer lorsque vous réfléchissez à la raison pour laquelle vous fusionnez. Fusionnez-vous l'expérience dans le tronc ou mettez-vous à jour l'expérience avec d'autres modifications survenues sur le tronc?.

En ce qui concerne les signets, avec les nouvelles versions de Mercurial, les signets font partie intégrante, et si vous mettez à jour un signet, dites comme ceci:

hg update moving-target

puis validez, ce signet suivra votre validation, c.-à-d. il ira de l'avant.

En conséquence, si vous avez un signet appelé Moving-Target sur la tête de la branche de tronc et que vous mettez à jour ce signet, l'ensemble de modifications de fusion, lorsque vous le validez, déplacera ce signet vers l'avant.

Une fois que vous avez créé une branche, vous ne pouvez pas obtenir exactement une seule branche par défaut (à quelques exceptions près, voir ci-dessous). Cependant, vous devriez pouvoir fusionner experiment en default et obtenir la même chose.

Si vous commencez par ceci:

enter image description here

et effectuez ceci:

hg update trunk
hg merge experiment

vous devriez vous retrouver avec ceci:

enter image description here

Autres options:

En utilisant rebase ou file d'attente de correctifs vous pouvez réellement déplacer les ensembles de modifications sur la branche experiment sur default. Cela supprimerait essentiellement la branche nommée experiment et créerait quelques autres ensembles de modifications default. Cependant, vous ne pouvez pas le faire si vous avez déjà partagé les ensembles de modifications de la première image ci-dessus avec un autre utilisateur.

13
dls