Dans le guide précédent, vous avez créé une branche ameliorer-style, et vous y avez ajouté un commit qui donne une couleur au titre de mon-premier-site. Ce travail vous convient et vous voulez maintenant qu'il fasse officiellement partie de main. C'est le rôle de git merge.

Le principe d'une fusion

Une fusion se fait toujours dans un sens précis : vous vous placez sur la branche qui doit recevoir le travail, puis vous lui demandez d'intégrer une autre branche, qui apporte ses commits. Vous ne fusionnez jamais « deux branches ensemble » de manière symétrique : il y a une branche cible, sur laquelle vous êtes, et une branche source, que vous nommez dans la commande.

Ici, la branche cible est main, et la branche source est ameliorer-style. Le nom de la branche principale peut varier d'un projet à l'autre, certains dépôts plus anciens utilisent encore master : ne supposez jamais qu'un dépôt inconnu utilise forcément main, vérifiez avec git branch.

Avant de fusionner

Deux vérifications avant d'aller plus loin. D'abord, assurez-vous que le travail sur ameliorer-style est bien terminé et committé : une fusion n'intègre que des commits, jamais des modifications encore en cours et non enregistrées. Ensuite, placez-vous sur la branche qui doit recevoir le résultat.

Fusionner ameliorer-style dans main

Le mot « Fast-forward » mérite une explication, parce que vous le reverrez souvent. Il indique que main n'avait reçu aucun nouveau commit depuis la création de ameliorer-style : Git n'a donc rien eu à combiner, il a simplement avancé le repère main jusqu'au dernier commit de ameliorer-style. C'est le cas de fusion le plus simple qui existe, sans aucun risque de conflit, précisément parce que les deux branches ne s'étaient jamais réellement écartées l'une de l'autre en parallèle.

Vous rencontrerez un cas différent, avec un vrai commit de fusion créé par Git, quand les deux branches auront chacune reçu des commits différents depuis leur séparation. C'est exactement la situation que vous allez provoquer volontairement dans le prochain guide, pour apprendre à gérer un conflit.

Vérifier le résultat

Ouvrez style.css : la règle de couleur ajoutée sur ameliorer-style doit maintenant y figurer, alors que vous êtes revenu sur main. Complétez par git status et git log --oneline.

Remarquez que main et ameliorer-style pointent désormais toutes les deux vers le même commit, entre parenthèses sur la première ligne. C'est la preuve que la fusion a bien eu lieu : les deux branches partagent maintenant exactement le même contenu.

Faut-il supprimer la branche fusionnée ?

Une fois qu'une branche a été fusionnée et que vous n'en avez plus besoin, vous pouvez la supprimer sans perdre son travail : les commits qu'elle contenait font déjà partie de main depuis la fusion. La commande git branch -d, suivie du nom, supprime une branche locale, mais refuse de le faire si Git détecte que son contenu n'a pas encore été fusionné ailleurs, ce qui protège d'une suppression accidentelle.

Ce n'est pas une obligation : garder une branche déjà fusionnée ne pose aucun problème technique. Beaucoup de développeurs préfèrent simplement nettoyer les branches inutiles pour garder une liste lisible avec git branch.

Erreur fréquente

Une fusion se lance depuis la branche qui reçoit le travail, jamais l'inverse. Si vous êtes encore sur ameliorer-style et que vous tapez git merge main, vous feriez l'opération à l'envers : vous intégreriez main dans ameliorer-style, pas le contraire. Vérifiez toujours votre branche active avec git status avant de fusionner.

Vérifiez que vous avez compris

Vous êtes sur main et vous venez de fusionner une branche sans qu'aucun message ne mentionne « Fast-forward », mais plutôt l'ouverture d'un éditeur de texte pour rédiger un message de commit de fusion. Qu'est-ce que cela signifie sur l'état de main avant la fusion ?

Cela signifie que main avait reçu au moins un nouveau commit depuis la création de la branche fusionnée. Git n'a alors pas pu se contenter d'avancer le repère : il a dû créer un commit de fusion spécifique, qui combine les deux historiques divergents. C'est le mécanisme que vous allez observer en détail, avec un vrai conflit à résoudre, dans le prochain guide.