Retour au cours

gestion des conflits git : résolution manuelle et outils

Objectifs

  • Comprendre pourquoi et quand un conflit de fusion se produit.
  • Identifier les marqueurs de conflit (<<<<<<<, =======, >>>>>>>) que Git insère dans les fichiers.
  • Résoudre un conflit simple manuellement en éditant le fichier.
  • Finaliser l’opération (merge ou rebase) une fois le conflit résolu.

Quand un conflit se produit-il ?

Un conflit de fusion survient lorsque vous essayez de fusionner deux branches qui ont modifié les mêmes lignes dans le même fichier. Git ne peut pas décider quelle version est la “bonne” et s’arrête, vous demandant de trancher. C’est une partie normale et saine du travail collaboratif.

Anatomie d’un conflit

Lorsque Git détecte un conflit, il modifie le fichier problématique pour y inclure les deux versions contradictoires, entourées de marqueurs spéciaux :

Le début du fichier est sans conflit.
Voici le contenu de la ligne dans votre branche actuelle (HEAD).
C'est la version que vous essayez de fusionner.
La fin du fichier est aussi sans conflit.
  • <<<<<<< HEAD : Marque le début de la version de votre branche courante.
  • ======= : Sépare les deux versions.
  • >>>>>>> ... : Marque la fin de la version de la branche que vous intégrez.

Le processus de résolution

La résolution d’un conflit se fait en 3 étapes : Éditer, Ajouter, Commiter.

Étape 1 : Identifier et Éditer le fichier

Git vous dira quels fichiers sont en conflit. Ouvrez-les dans votre éditeur de code. Votre travail consiste à modifier le fichier pour ne laisser que la version finale souhaitée. Cela peut être :

  • Garder uniquement votre version.
  • Garder uniquement l’autre version.
  • Un mélange des deux.
  • Quelque chose de complètement nouveau qui combine la logique des deux.

L’important est que vous devez supprimer manuellement les marqueurs <<<<<<<, =======, et >>>>>>>.

Étape 2 : Marquer le conflit comme résolu (git add)

Une fois que le fichier a l’apparence finale que vous désirez, vous devez le dire à Git en l’ajoutant au staging area.

git add <fichier_resolu.txt>

Cette commande ne fait pas un nouveau commit, elle indique simplement à Git “J’ai fini de résoudre les conflits pour ce fichier”.

Étape 3 : Finaliser l’opération

La dernière étape dépend de l’opération qui a causé le conflit.

  • Si c’était un git merge : Vous terminez en créant le commit de fusion.

    git commit

    Git vous proposera un message de commit par défaut (ex: “Merge branch ‘feature/x’”), que vous pouvez conserver.

  • Si c’était un git rebase : Vous continuez simplement le processus de rebase.

    git rebase --continue

Outils graphiques

La plupart des éditeurs de code modernes (comme VS Code, JetBrains IDEs) ont des outils de résolution de conflits intégrés. Ils affichent les deux versions côte à côte et vous permettent de choisir quelle ligne ou quel bloc garder en cliquant sur des boutons, ce qui est souvent plus simple que d’éditer les marqueurs manuellement.

Bonnes pratiques

  • Ne paniquez pas. Un conflit n’est pas une erreur, c’est une demande de clarification de la part de Git.
  • Communiquez avec vos collaborateurs pour savoir pourquoi ils ont modifié la même ligne que vous.
  • Faites des commits petits et fréquents. Il est beaucoup plus facile de résoudre un petit conflit sur quelques lignes qu’un énorme conflit sur des centaines de lignes après deux semaines de travail.
  • Si vous êtes perdu, vous pouvez toujours annuler :
    • git merge --abort pour annuler une fusion.
    • git rebase --abort pour annuler un rebase.

Exercices

Reprenons l’exercice de la leçon précédente où nous avons intentionnellement créé un conflit.

  1. Provoquez le conflit :

    • Sur une branche main, modifiez un fichier. Commitez.
    • Créez une branche feature/conflit, modifiez la même ligne différemment. Commitez.
    • Revenez sur main et essayez de fusionner : git merge feature/conflit. Git devrait s’arrêter en signalant un conflit.
  2. Résolvez le conflit :

    • Exécutez git status pour voir quel fichier est en conflit.
    • Ouvrez ce fichier. Observez les marqueurs <<<<<<<.
    • Éditez le fichier pour qu’il ait le contenu final que vous souhaitez (en supprimant les marqueurs).
  3. Finalisez la fusion :

    • Exécutez git add <fichier_resolu>.
    • Exécutez git commit. Gardez le message de commit par défaut.
    • Vérifiez l’historique avec git log --oneline --graph pour voir le commit de fusion.