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:
git clone
README.md
contenant les paroles d’une chanson de votre choixgit add
, git commit
puis git push
branche1
à partir de master
, avec git checkout -b
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 GitLabmaster
avec git checkout
branche2
à partir de master
(comme dans l’étape 5)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 GitLabmaster
branche1
dans master
, avec git merge
branche2
dans master
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:
README.md
dans son éditeur de code,git
représente le conflit, et la source de chaque version,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
branche1
et branche2
, non seulement dans votre dépôt local, mais aussi dans le dépôt distant associé (sur GitLab).