Un conflit de fusion intervient lorsque l'on tente de fusionner deux branches qui modifient la même partie d'un même fichier. Dans ce cas, git
va intégrer les deux versions dans le même fichier puis laisser le développeur décider du contenu final de cette partie.
L'objectif de ce tuto est d'apprendre à résoudre un conflit de fusion. (merge conflict)
Pour cela, nous allons devoir commencer par en causer un !
Étapes à suivre, une par une:
- Créer un nouveau dépôt sur GitHub
- Dans le répertoire du dépôt local, créer un fichier
README.md
contenant les paroles d'une chanson de votre choix - Créer un commit initial sur la banche master et l'envoyer sur GitHub avec
git add
,git commit
puisgit push
- Créer une branche
branche1
à partir demaster
, avecgit checkout -b
- Dans le
README.md
de cette branche, modifier à votre guise la première phrase des paroles, créer un commit, puis envoyer les modifications de cette branche sur GitLab - Revenir à la branche
master
avecgit checkout
- Créer une branche
branche2
à partir demaster
(comme dans l'étape 5) - Dans le
README.md
de cette branche, modifier également la première phrase des paroles avec un texte différent de celui saisi à l'étape 6, créer un commit, puis envoyer les modifications de cette branche sur GitLab - Revenir à la branche
master
- Fusionner
branche1
dansmaster
, avecgit merge
- Fusionner
branche2
dansmaster
Si vous avez bien suivi cette procédure, vous devriez obtenir un conflit de fusion:
Auto-merging README.md
CONFLICT (content): Merge conflict in README.md
Automatic merge failed; fix conflicts and then commit the result.
Voici ce que devrait répondre git status
:
On branch master
You have unmerged paths.
(fix conflicts and run "git commit")
(use "git merge --abort" to abort the merge)
Unmerged paths:
(use "git add <file>..." to mark resolution)
both modified: README.md
Pour résoudre ce conflit, il va falloir:
- ouvrir le fichier
README.md
dans son éditeur de code, - constater comment
git
représente le conflit, et la source de chaque version, - éditer le fichier pour ne conserver que la version finale souhaitée,
- puis créer un commit.
Au moment du commit:
- si vous vous retrouvez dans l'éditeur
vi
, tapez:wq
pour quitter en sauvegardant le fichier;- si vous vous retrouvez dans l'éditeur
nano
, pressezCtrl-X
pour quitter.
Après la résolution du conflit de fusion, git status
devrait répondre ceci:
On branch master
nothing to commit, working tree clean
- supprimer les branches
branche1
etbranche2
, non seulement dans votre dépôt local, mais aussi dans le dépôt distant associé (sur GitHub).