Leçon 10 / 15

Repérer l’origine d’un conflit

20 min Git — branches, revue et historique Gratuit

Objectif : Identifier les fichiers en conflit et les changements concurrents qui empêchent un rebase ou une fusion d’aboutir.

Quand deux branches modifient une même zone d’un fichier, Git peut ne pas déterminer automatiquement quel contenu conserver. L’opération de rebase ou de fusion s’interrompt alors : vous devez d’abord repérer les fichiers concernés et comprendre l’origine du désaccord.

Dans le projet Sentiers, imaginez que votre branche feature/nouveaux-guides ajoute la section « Nouveaux guides » à index.html, tandis qu’un collègue modifie au même endroit le texte de l’introduction sur la branche principale. Les deux versions peuvent être cohérentes séparément, mais Git ne connaît pas l’intention éditoriale de l’équipe. Le conflit indique un choix à examiner, pas nécessairement une erreur dans le code.

Reconnaître l’interruption

Pendant un rebase ou une fusion, un conflit interrompt l’opération avant qu’elle soit terminée. Git affiche généralement le nom du fichier concerné et vous demande de résoudre le conflit avant de poursuivre. Ne relancez pas immédiatement la commande d’intégration : commencez par lire l’état du dépôt et identifier l’opération en cours.

Terminal
git status
Résultat attendu
interactive rebase in progress; onto 8a31c2d
You are currently rebasing branch 'feature/nouveaux-guides' on '8a31c2d'.
  (fix conflicts and then run "git rebase --continue")

Unmerged paths:
  (use "git add <file>..." to mark resolution)
        both modified:   index.html

Cet affichage est un exemple de résultat possible, pas l’état réel garanti de votre dépôt. Il vous apprend ici que le rebase est en cours et que index.html a été modifié des deux côtés. Si plusieurs fichiers apparaissent sous « Unmerged paths », chacun doit être examiné. Dans cette leçon, vous les repérez ; la résolution elle-même sera traitée ensuite.

Lire les marqueurs sans les modifier

Git peut inscrire des marqueurs directement dans un fichier en conflit. Ils délimitent les contenus qui s’opposent : la partie après <<<<<<< correspond généralement à la version de votre branche courante, et celle après ======= à la version rejouée ou fusionnée. La ligne >>>>>>> ferme le passage et peut comporter une référence de commit.

HTML
<<<<<<< HEAD
<p>Parcourez des itinéraires choisis pour préparer votre sortie.</p>
=======
<p>Parcourez des itinéraires sélectionnés pour votre prochaine randonnée.</p>
>>>>>>> 4f72a10 (ajoute les nouveaux guides)
Aperçu du rendu
Chargement de l'aperçu…

Ces lignes illustrent un conflit possible dans le texte de l’introduction de index.html. Les marqueurs ne font pas partie du HTML souhaité : ils signalent seulement à Git les deux contenus candidats. Selon l’opération, l’étiquette du début peut varier ; ne vous fiez pas uniquement à son nom pour déduire ce que l’équipe veut conserver. Les changements concurrents peuvent aussi se trouver à des lignes proches, même si les textes ne sont pas identiques.

Comprendre l’origine avant d’agir

Un conflit apparaît lorsqu’une opération doit combiner des modifications qui se recouvrent et qu’aucune combinaison automatique ne convient avec certitude. Pour en repérer l’origine, notez le fichier signalé, l’opération en cours et la zone balisée, puis reliez ces informations aux changements apportés par chaque branche. L’historique se lit avec git log --graph, vu dans « Lire l’historique avant de le modifier » ; il aide à replacer les commits, mais ne décide pas du contenu final.

Vous pouvez consulter les différences enregistrées dans les commits concernés et les commentaires de revue associés pour comprendre l’objectif de chaque changement. Ne choisissez pas automatiquement la version la plus récente ou la plus longue : les deux propositions peuvent porter une intention utile, ou devoir être reformulées ensemble. La comparaison détaillée des versions et l’édition des marqueurs seront étudiées dans la prochaine leçon.

À retenir

  • Un conflit suspend le rebase ou la fusion lorsqu’il faut arbitrer des changements concurrents.
  • Utilisez `git status` pour repérer l’opération en cours et les fichiers signalés comme non fusionnés.
  • Les marqueurs délimitent les versions en désaccord ; ils ne constituent pas le contenu final à livrer.
  • Comprenez l’intention des changements avant de choisir ou de combiner leur contenu.

Dans la prochaine leçon, vous comparerez les deux versions et modifierez les marqueurs pour préserver l’intention des changements.

Envie d'aller plus loin ?

Les cours Enovatic sont gratuits et le resteront. Si vous cherchez un accompagnement encadré, nos formations professionnelles sont animées par les mêmes formateurs.