Git Tutorial - Fusionner des branches
Nous allons apprendre à fusionner des branches et aussi à gérer les conflits s’il y en a.
Dans le dernier tutoriel, nous avons créé une nouvelle branche pour travailler sur de nouvelles fonctionnalités que nous ne voulons pas gâcher la branche master
.
Une fois que nous avons créé ces nouvelles branches et que nous sommes satisfaits des nouvelles fonctionnalités, nous devons la fusionner à nouveau dans la branche master
. Ainsi, lorsque nous publierons le code de la prochaine version, la nouvelle fonctionnalité sera également incluse.
Avance rapide git merge
(fusion)
Disons que nous sommes contents des changements dans la branche new_test_branch
et que nous allons la fusionner avec la branche master
.
-
Regardez la branche
master
.
$ git checkout master
-
Fusionner la branche avec le
master
.
$ git merge new_test_branch
Updating 5fef94e..e7a7e81
Fast-forward
test3.txt | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
Nous avons pris la fonctionnalité de la branche new_test_branch
et l’avons fusionnée dans cette branche master
.
Le Fast-forward
montré dans le message après la fusion signifie que git fait une avance rapide jusqu’aux changements de code que nous avons fait dans la branche parce que dans le temps entre le branchement et la fusion dans master, nous n’avons pas réellement fait de changements dans la branche master
.
Fusion récursive de Git
Avant de démontrer cette différente git merge
, nous devons créer deux branches test_branch_A
et test_branch_B
et leur faire des changements différents. Ensuite, nous fusionnerons la test_branch_A
avec la branche master
.
Maintenant, nous allons fusionner test_branch_B
avec la branche master
.
$ git merge test_branch_B
Merge made by the 'recursive' strategy.
test1_rename.txt | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
La différence entre cette fusion et la fusion fast-forward
est que la fusion est faite par la stratégie récursive parce que le code de cette branche n’a pas la fonctionnalité test_branch_A
. En d’autres termes, la branche master
a changé après que la branche test_branch_B
soit créée.
Maintenant, master
est à jour avec ces deux fonctionnalités, et peu importe que nous ayons travaillé dessus en même temps, les différentes personnes qui les font avec les deux les fusionnent et tout va bien.
Résoudre les conflits
Ce que nous avons modifié dans deux branches de test n’a pas de conflit, mais que faire s’il y a des conflits quand vous fusionnez certaines branches vers le master
?
Créons deux branches test_branch_C
et test_branch_D
, puis ajoutons le texte The letter should be C
au fichier test3.txt
dans la branche test_branch_C
et ajoutons le texte The letter should be D
au fichier test3.txt
dans la branche test_branch_D
.
Ensuite nous fusionnons le fichier test_branch_C
dans la branche master
.
Maintenant, nous allons fusionner test_branch_D
dans la branche master
,
$ git merge test_branch_D
Auto-merging test3.txt
CONFLICT (content): Merge conflict in test3.txt
Automatic merge failed; fix conflicts and then commit the result.
Vous pouvez voir ici qu’il n’a pas pu être fusionné avec succès car il détecte le conflit dans le fichier test3.txt
. Nous devons résoudre manuellement le conflit en éditant le fichier en conflit.
Le fichier test3.txt
montre le conflit comme
<<<<<<< HEAD
The letter should be C
=======
The letter should be D
>>>>>>> test_branch_D
Le texte entre HEAD
et =======
est le texte dans la branche master
qui vient de la branche fusionnée test_branch_C
, qui diffère du texte dans la branche à émerger test_branch_D
.
Vous devez choisir quel texte doit rester dans la branche master
, et effacer tous les symboles comme <<<<<
et >>>>>>
.
Disons que le texte ajouté doit être The letter should be D
. Nous mettons à jour la zone de conflit pour qu’elle soit The letter should be D
.
Après avoir résolu le conflit, nous pourrions commettre le conflit résolu en utilisant git commit
.
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook