Git Tutorial - Fusionner des branches

Jinku Hu 30 janvier 2023
  1. Avance rapide git merge (fusion)
  2. Fusion récursive de Git
  3. Résoudre les conflits
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.

Auteur: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

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