GIT fusionner le maître dans une branche

49

J'ai développé une nouvelle fonctionnalité sur une nouvelle branche et, du côté, j'ai apporté pas mal de modifications à ma branche principale.

Est-il possible de fusionner la branche principale dans ma nouvelle branche pour la maintenir à jour afin d'éviter les conflits de fusion une fois que la nouvelle fonctionnalité est terminée?

mnml
la source
Avez-vous essayé git-merge? Aide ici .
karatedog

Réponses:

56

Vous pouvez soit git merge masterou git rebase master, dans ce cas, je préférerais git rebase .

Parce git rebaseque cela donne l'impression que les modifications sur la branche de fonctionnalité ont été effectuées en plus des modifications sur la branche principale, ce qui simplifie le graphique de version.

Rebase

En prenant l'exemple du manuel de git rebase , git rebase masterdans branche feature:

      A---B---C feature                             A'--B'--C' feature
     /                   --rebase-->               /
D---E---F---G master                  D---E---F---G master

Cependant, cela git rebasene convient que lorsque la branche n’a pas été distribuée ou en cas de confusion et de travail supplémentaire en aval, car les anciennes commises A, B, C sont désormais remplacées par de nouvelles commissions A ', B', C ', plus F et G qui n'étaient pas là avant.

Le résultat réel après git rebase masteren branche featureest le suivant:

      ( A---B---C )
       /
      /       A'--B'--C' feature
     /       /
D---E---F---G master

Les commits A, B et C sont en suspens après la réabonnement, mais sont joignables git reflog feature.

Fusionner

Si quelqu'un a retiré votre branche ou si vous l'avez poussée quelque part, vous devriez plutôt vous y fondre pour éviter toute confusion et tout travail supplémentaire à l'autre bout. Voir Récupération à partir d'une base amont .

Ceci est le résultat de git merge masterin branch feature:

      A---B---C feature                    A---B---C---M feature
     /                   --merge-->       /       ,---’
D---E---F---G master                 D---E---F---G master

Alternativement, si vous êtes git merge featureen branche master, cela ressemblerait à ceci:

      A---B---C feature                    A---B---C feature
     /                   --merge-->       /         \
D---E---F---G master                 D---E---F---G---M master
Christoffer Hammarström
la source
Vous devriez expliquer pourquoi vous préférez rebaser et quelle est la différence. Rebase crée une histoire linéaire - cela pourrait ne pas répondre à cette question.
Andreas Rehm
Ok si je le comprends bien: je dois vérifier la branche master si la nouvelle fonctionnalité n’est pas encore terminée et une rebase s’il est terminé?
mnml
Non, si la branche de fonctionnalité git rebase masterest extraite , faites-la , et cela «rebasonnera» les modifications apportées à la branche de manière à ce qu'elles soient «basées» sur les modifications apportées à la branche principale. Si les modifications dans la branche principale entrent en conflit avec les modifications dans la branche, git vous demandera de les résoudre et de continuer, de les ignorer ou d'abandonner. En cas de doute, vous pouvez utiliser une branche de test pour l’essayer git checkout -b test-feature feature(en supposant que votre branche de fonctionnalité porte le nom "fonctionnalité").
Christoffer Hammarström
2
Que voulez-vous dire "je ne peux plus voir ma branche"? Quoi qu'il en soit, git rebasene devrait être utilisé que si la branche n'a pas été distribuée, ce qui, je suppose, était le cas puisque vous avez dit que c'était une nouvelle branche, désolée pour cela. Voir Récupération à partir d'une base amont dans les documents liés. Vous devrez utiliser à la git mergeplace. Et vous pouvez utiliser git reflogpour retrouver votre tête de branche précédente si vous souhaitez la récupérer.
Christoffer Hammarström
1
Je n'ai jamais vu d'explication plus claire sur les différences entre fusion et rebase. Je vous remercie.
Paulo Pedroso