2385 votes

Quelle est la meilleure (et la plus sûre) façon de fusionner une branche Git dans master ?

Une nouvelle branche de master est créé, nous l'appelons test .

Il y a plusieurs développeurs qui s'engagent soit à master ou créer d'autres branches et les fusionner plus tard dans master .

Disons que le travail sur test prend plusieurs jours et vous voulez continuer à garder test mis à jour avec des commits dans master .

Je ferais git pull origin master de test .

Question 1 : Est-ce la bonne approche ? D'autres développeurs auraient pu facilement travailler sur les mêmes fichiers que moi.


Mon travail sur test est terminé et je suis prêt à le fusionner de nouveau avec master . Voici les deux moyens auxquels je pense :

A :

git checkout test
git pull origin master
git push origin test
git checkout master
git pull origin test 

B :

git checkout test
git pull origin master
git checkout master
git merge test

Je n'utilise pas --rebase parce que d'après ce que j'ai compris, rebase récupérera les modifications de master et empiler le mien par-dessus, ce qui pourrait écraser les changements faits par d'autres personnes.

Question 2 : Laquelle de ces deux méthodes est la bonne ? Quelle est la différence ?

Le but dans tout ça est de garder mon test mis à jour avec les choses qui se passent dans master et plus tard, je pourrais les fusionner à nouveau dans master en espérant garder la chronologie aussi linéaire que possible.

27 votes

Non rebase n'écrase jamais, il essaie juste d'obtenir un historique plus propre. en rattachant (ou en falsifiant) l'historique au dernier point du maître

9 votes

Rebase n'écrase pas vos commits. Il annule vos commits, applique les commits de la branche master à votre branche test, puis applique vos commits à nouveau à test.

1 votes

Que faire si nous n'avons pas d'accès en écriture à master ? Y a-t-il un moyen de résoudre les conflits de manière préemptive sur la branche des fonctionnalités ? Probablement pas, je suppose, puisque les histoires ont probablement divergé.

2voto

Julian Points 972

Comme le titre le dit, "La meilleure façon", je pense que c'est une bonne idée de considérer la patience stratégie de fusion.

De : https://git-scm.com/docs/merge-strategies

Avec cette option, 'merge-recursive' passe un peu plus de temps pour éviter les erreurs de fusion qui se produisent parfois à cause de lignes de correspondance sans importance (par exemple, des accolades de fonctions distinctes). Utilisez ceci lorsque les branches à fusionner ont divergé de façon importante. Voir aussi git-diff[1] --patience.

Utilisation :

git fetch
git merge -s recursive -X patience origin/master

Alias Git

J'utilise toujours un alias pour cela, par exemple "run once" :

 git config --global alias.pmerge 'merge -s recursive -X patience'

Maintenant, tu pourrais le faire :

git fetch
git pmerge origin/master

0voto

Masoud Mokhtari Points 1251

Vous devez avoir la branche extraite pour pouvoir tirer, puisque tirer signifie fusionner dans master, et vous avez besoin d'un arbre de travail pour fusionner.

git checkout master
git pull

Pas besoin de vérifier d'abord ; rebase fait la bonne chose avec deux arguments.

git rebase master test  

git checkout master
git merge test

git push par défaut pousse toutes les branches qui existent ici et sur le serveur distant.

git push
git checkout test

0voto

shdr Points 497

Cela vient de GitLab : Il suffit de suivre les instructions :

enter image description here

0voto

mchavezi Points 319

J'ai toujours des conflits de fusion quand je fais juste git merge feature-branch . Cela semble fonctionner pour moi :

git checkout -b feature-branch

Faire un tas de changements de code...

git merge -s ours master 

git checkout master

git merge feature-branch

ou

git checkout -b feature-branch

Faire un tas de changements de code...

git checkout master

git merge -X theirs feature-branch

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X