Mon référentiel git a actuellement deux branches de fonctionnalités créées à partir de la branche master. Appelons les deux branches de fonctionnalités A et B. A a été créé 4 commits avant la création de B. Actuellement, A et B ne se chevauchent presque pas avec un seul petit conflit de fusion.

En raison des horaires de travail, je ne suis pas autorisé à fusionner A et B dans le maître pendant 45 jours supplémentaires. Alors que je continue à travailler, j'ai maintenant du mal à me souvenir quelle branche contient quels changements, et je voudrais fusionner les deux branches en une seule. Quels sont les avantages et les inconvénients de la fusion de A dans B (l'ancien dans le plus récent)?

git checkout B
git merge A

Quels sont les avantages et les inconvénients de la fusion de B dans A (du plus récent au plus ancien)?

git checkout A
git merge B
-1
Barzee 5 nov. 2020 à 19:19

2 réponses

Meilleure réponse

Les deux approches produiraient le même résultat du point de vue du code, à condition que vous preniez les mêmes décisions de résolution des conflits de fusion lors de la fusion.

Du point de vue de la lecture de l'historique de git, il est plus logique de fusionner l'ancienne branche avec la plus récente, car vous pouvez plus facilement suivre les dates des commits, mais ce n'est qu'une préférence de l'utilisateur.

Je suggérerais, puisque la direction est sur votre chemin, de fusionner ces deux branches en une troisième branche temporaire distincte.

git checkout A # can checkout B as well
git checkout -b temporary-C-branch
git merge B # or A if you checked out B first. Also think about using --no-ff if you want a merge commit as well

De cette façon, vous ne devez pas gâcher A et B lors de la fusion.

2
mnestorov 5 nov. 2020 à 16:30

les avantages et les inconvénients

Aucun. La fusion de A dans B et la fusion de B dans A sont simplement deux choses - deux choses différentes. Il n'y a pas de choix entre eux; ils ne s'excluent pas mutuellement (vous pouvez faire les deux, et les gens le font souvent), et l'un n'est pas «meilleur» que l'autre. Vous faites celui que vous faites parce que c'est ce que vous voulez faire.

La différence topologique réside simplement dans ce qui arrive aux branches respectives et dans laquelle est le "premier parent".

  • Si vous êtes sur A et que vous fusionnez B dans A, alors B s'arrête avant la validation de fusion; le commit de fusion est effectué sur A, vous êtes toujours sur A, et le commit précédent sur A est le premier parent du commit de fusion (et B est son deuxième parent).

  • Si vous êtes sur B et que vous fusionnez A dans B, alors c'est exactement l'inverse: A s'arrête avant la validation de fusion; le commit de fusion est effectué sur B, vous êtes toujours sur B, et le commit précédent sur B est le premier parent du commit de fusion (et A est son deuxième parent).

Il y a aussi, bien sûr, une différence entre qui est --ours et qui est --theirs. Cela compte si vous choisissez une stratégie de fusion qui utilise cette distinction en cas de conflit. Cependant, toutes choses étant égales par ailleurs, le contenu de la validation de fusion est exactement le même quelle que soit la "manière" dont la fusion est effectuée.

0
matt 5 nov. 2020 à 17:02