Table des matières
- Introduction
- 1. Qu’est-ce qu’une fusion Git ?
- 2. Reprendre le projet existant
- 3. Vérifier le contenu de nouvelle-page
- 4. Vérifier que main ne possède pas encore contact.html
- 5. Toujours se placer sur la branche qui reçoit les modifications
- 6. Fusionner nouvelle-page dans main
- 7. Comprendre le fast-forward
- 8. Vérifier que contact.html est maintenant dans main
- 9. Vérifier l’état du dépôt
- 10. Vérifier l’historique
- 11. La branche nouvelle-page existe encore
- 12. Supprimer la branche après la fusion
- 13. Pourquoi Git accepte maintenant de supprimer la branche ?
- 14. Créer une autre branche pour continuer à travailler
- 15. Que se passe-t-il si main a aussi évolué ?
- 16. Le commit de fusion
- 17. Et si les deux branches modifient la même chose ?
- Conclusion
Introduction
Dans le tutoriel précédent, nous avons découvert le fonctionnement des branches Git avec git branch et git switch.
Nous avons créé une branche appelée nouvelle-page, puis ajouté un nouveau fichier contact.html uniquement dans cette branche.
À la fin du tutoriel, notre projet se trouvait dans une situation similaire à celle-ci :
Le commit D contient l’ajout de contact.html.
La branche main, elle, ne contient pas encore cette modification.
Nous allons maintenant apprendre à intégrer le travail réalisé dans nouvelle-page à la branche principale avec la commande git merge.
Dans ce tutoriel, nous allons découvrir :
- ce qu’est une fusion de branches ;
- comment vérifier l’état des branches ;
- comment revenir sur main ;
- comment fusionner une branche avec git merge ;
- ce qu’est une fusion fast-forward ;
- comment vérifier le résultat ;
- comment supprimer une branche après fusion ;
- ce qu’il se passe lorsque deux branches ont évolué différemment.
Nous allons reprendre exactement le même dossier mon-projet utilisé dans le tutoriel précédent.
1. Qu’est-ce qu’une fusion Git ?
Une fusion Git permet de réunir le travail réalisé sur une branche avec une autre branche.
Dans notre exemple, nous avons :
Le commit D existe uniquement dans nouvelle-page.
Notre objectif est que main récupère cette modification.
Après la fusion, nous voulons arriver à une situation similaire à celle-ci :
Le travail réalisé sur nouvelle-page sera alors intégré à main.
2. Reprendre le projet existant
Placez-vous dans le dossier du projet :
cd mon-projet
Vérifiez l’état du dépôt :
git status
Puis affichez les branches disponibles :
git branch
Nous devons retrouver au minimum :
L’astérisque indique la branche actuellement utilisée.
Son emplacement dépend donc de la branche sur laquelle vous vous trouvez.
3. Vérifier le contenu de nouvelle-page
Avant de réaliser la fusion, nous pouvons vérifier que le fichier contact.html est bien présent sur nouvelle-page.
Basculez sur cette branche :
git switch nouvelle-page
Puis affichez les fichiers :
ls
Vous devriez retrouver quelque chose de similaire :
Le fichier contact.html est bien présent dans cette branche.
4. Vérifier que main ne possède pas encore contact.html
Revenez maintenant sur main :
git switch main
Vérifiez les fichiers :
ls
Vous devriez obtenir quelque chose de similaire :
Le fichier contact.html n’est pas encore présent sur main.
C’est précisément ce que nous allons changer avec git merge.
5. Toujours se placer sur la branche qui reçoit les modifications
Avant d’utiliser git merge, il est important de comprendre une règle essentielle.
Vous devez vous placer sur la branche qui doit recevoir les modifications.
Dans notre cas, nous voulons intégrer nouvelle-page dans main.
Nous devons donc être sur main.
Vérifiez avec :
git branch
Nous voulons obtenir :
Si nécessaire, revenez sur main avec :
git switch main
6. Fusionner nouvelle-page dans main
Nous pouvons maintenant lancer la fusion :
git merge nouvelle-page
Git va intégrer dans main les commits présents sur nouvelle-page.
Dans notre exemple, Git devrait réaliser une fusion simple.
Vous pourrez voir un résultat similaire à :
Les identifiants de commits seront différents sur votre machine.
L’élément important ici est Fast-forward.
Nous allons voir ce que cela signifie.
7. Comprendre le fast-forward
Dans notre scénario, main n’a pas reçu de nouveau commit depuis la création de nouvelle-page.
Nous avions :
Le commit D vient directement après C.
Git n’a donc pas besoin de créer un commit de fusion supplémentaire.
Il lui suffit de déplacer la référence de main jusqu’au commit D.
Après le merge, nous obtenons :
C’est ce que Git appelle une fusion fast-forward.
8. Vérifier que contact.html est maintenant dans main
Après la fusion, affichez les fichiers :
ls
Vous devriez maintenant voir :
Le fichier contact.html est désormais présent sur main.
La fusion a donc bien fonctionné.
9. Vérifier l’état du dépôt
Utilisez :
git status
Si tout s’est bien passé, Git devrait indiquer qu’aucune modification n’est en attente.
Par exemple :
Cela signifie que la fusion est terminée et que le dépôt est propre.
10. Vérifier l’historique
Pour afficher l’historique :
git log --oneline
Vous devriez voir le commit correspondant à l’ajout de la page contact dans l’historique de main.
Par exemple :
Vous pouvez également utiliser :
git log --oneline --graph --all
Cette commande permet de visualiser plus clairement les branches et les commits.
Après notre fusion fast-forward, l’historique ressemble désormais à une ligne unique.
11. La branche nouvelle-page existe encore
La commande git merge fusionne le contenu de la branche, mais ne supprime pas automatiquement la branche.
Vérifiez avec :
git branch
Vous devriez toujours voir :
La branche nouvelle-page existe toujours, même si son travail a été intégré à main.
12. Supprimer la branche après la fusion
Maintenant que nouvelle-page a été fusionnée, elle peut être supprimée si elle n’est plus nécessaire.
Utilisez :
git branch -d nouvelle-page
Git devrait accepter la suppression.
Vous pouvez ensuite vérifier :
git branch
Vous devriez maintenant obtenir :
La branche de travail a été supprimée, mais son commit est toujours présent dans l’historique de main.
Supprimer une branche ne supprime donc pas les modifications qui ont déjà été fusionnées.
13. Pourquoi Git accepte maintenant de supprimer la branche ?
Dans le tutoriel précédent, Git pouvait refuser la suppression de nouvelle-page avec :
git branch -d nouvelle-page
car son travail n’était pas encore intégré à main.
Après la fusion, ce n’est plus le cas.
Le commit contenant contact.html fait maintenant partie de l’historique de main.
Git peut donc supprimer la branche sans risquer de faire perdre le travail.
14. Créer une autre branche pour continuer à travailler
Si vous souhaitez développer une nouvelle fonctionnalité, vous pouvez créer une nouvelle branche depuis main.
Par exemple :
git switch -c correction-menu
Vous créez alors une nouvelle branche et basculez directement dessus.
Vous pouvez travailler dessus, créer des commits, puis revenir sur main et fusionner avec :
git switch main
git merge correction-menu
C’est un fonctionnement classique avec Git.
15. Que se passe-t-il si main a aussi évolué ?
Notre premier exemple était simple parce que main n’avait pas reçu de nouveau commit après la création de nouvelle-page.
Mais imaginons maintenant une situation différente :
Ici, les deux branches ont évolué indépendamment.
nouvelle-page possède son propre commit.
main possède également un nouveau commit.
Git ne peut donc plus simplement déplacer main vers le commit de la branche.
Il doit réunir les deux historiques.
16. Le commit de fusion
Dans ce type de situation, Git peut créer un nouveau commit de fusion.
Nous pouvons représenter cela ainsi :
Le commit F correspond à la fusion des deux historiques.
Cette fusion permet de conserver les modifications réalisées sur les deux branches.
17. Et si les deux branches modifient la même chose ?
Une fusion n’est pas toujours automatique.
Si deux branches modifient la même partie d’un même fichier, Git peut ne pas savoir quelle version conserver.
On parle alors de conflit de fusion.
Par exemple, main modifie une ligne dans index.html et nouvelle-page modifie exactement la même ligne différemment.
Lors de la commande :
git merge nouvelle-page
Git peut alors signaler un conflit.
Il faudra choisir manuellement quelle version conserver avant de terminer la fusion.
La résolution des conflits mérite un tutoriel dédié, car elle demande plusieurs étapes supplémentaires.
Conclusion
Dans ce tutoriel, nous avons appris à fusionner une branche Git avec git merge.
Nous avons repris la branche nouvelle-page créée dans le tutoriel précédent et contenant le fichier contact.html.
Nous sommes revenus sur main, puis nous avons exécuté :
git merge nouvelle-page
Git a réalisé une fusion fast-forward, car main n’avait pas évolué depuis la création de la branche.
Le fichier contact.html est alors devenu disponible sur main.
Nous avons ensuite vérifié l’historique et supprimé proprement la branche devenue inutile avec :
git branch -d nouvelle-page
Nous avons également vu que les fusions peuvent devenir plus complexes lorsque plusieurs branches évoluent indépendamment.
Dans le prochain tutoriel, nous pourrons aller plus loin en découvrant comment identifier et résoudre les conflits de fusion Git.
Commentaires
Laisser un commentaire
Soyez le premier à commenter cet article !