Mis à jour le 12/12/2016
  • 6 heures
  • Facile

Ce cours est visible gratuitement en ligne.

Ce cours est en vidéo.

Vous pouvez obtenir un certificat de réussite à l'issue de ce cours.

Vous pouvez être accompagné et mentoré par un professeur particulier par visioconférence sur ce cours.

J'ai tout compris !

Résolvez un conflit

Connectez-vous ou inscrivez-vous gratuitement pour bénéficier de toutes les fonctionnalités de ce cours !

 

Vous avez vu dans le chapitre précédent comment fusionner des branches. Nous avons utilisé un exemple assez simple où tout s'est bien passé. Mais il arrive très souvent qu'il y aie des conflits entre les deux branches qui empêchent de les fusionner, par exemple lorsque plusieurs personnes travaillent en même temps sur un même fichier.

Exemple : votre branche master contient un fichier Hello.md avec une ligne de texte : "Hello les amis !". Votre branche universal contient un fichier Hello.md avec une ligne de texte : "Hello tout le monde !".

Si vous tentez de fusionner la branche universal dans la branche master :

git checkout master
git merge universal

Git va reconnaître qu'il existe un conflit entre les deux branches car la 1re ligne du fichier Hello est différente dans chacune des branches et afficher le message suivant : 

Auto-merging hello.md
CONFLICT (content): Merge conflict in hello.md
Automatic merge failed; fix conflicts and then commit the result.

Vous allez donc devoir ouvrir le fichier hello.md dans votre éditeur de texte. Si vous utilisez l'éditeur Vim, vous pouvez le faire à partir du terminal avec la commande : 

vim hello.md

Vous allez alors voir les différences de contenu du fichier hello.md entre les deux branches, et vous pouvez choisir quel contenu garder pour la branche master dans laquelle vous faites le merge. Par exemple, vous pouvez garder "Hello les amis", sauvegarder le fichier et revenir dans la console.

Maintenant que vous avez résolu le conflit, il vous reste à le dire à Git ! Car pour l'instant, si vous faites un git status, git vous dira que vous avez des branches non fusionnées ("unmerged paths"). Pour cela, faites un commit sans message : 

git commit

Git va détecter que vous avez résolu le conflit et vous proposer un message de commit par défaut :

 

Vous pouvez  alors personnaliser le message du commit si vous le souhaitez. Dans notre cas, la résolution étant assez simple, nous allons garder le message proposé par défaut et le sauvegarder en tapant :x

Git va alors vous confirmer que vos branches ont été fusionnées, et si vous consulter l'historique des commits avec git log, vous verrez apparaître le dernier commit de résolution du conflit avec le message :

 Merge branch 'universal'
Conflicts:
       hello.md

 

Exemple de certificat de réussite
Exemple de certificat de réussite