Aller au contenu principal

Prise en main de Git — Chapitre 4 / 4

Résoudre les conflits

Les conflits font peur à beaucoup de gens. Mais ils sont normaux. Ce chapitre t'apprend à les comprendre et à les résoudre calmement.

Chapitre 4 / 4

Étape 01 / 09

Un conflit, c'est quoi ?

Concept

Mot clé : conflit de merge Un conflit arrive quand deux branches ont modifié la même partie du même fichier. Git ne sait pas quelle version garder. Il te demande de choisir.

Imagine un document partagé. Toi et un collègue modifiez le même paragraphe en même temps. Le logiciel ne sait pas quelle version garder. Il vous demande de décider ensemble.

C'est exactement ce qui se passe avec Git. Un conflit n'est pas une erreur. C'est Git qui te dit : «je ne peux pas décider à ta place».

Concept

Point important Git résout automatiquement la plupart des fusions. Un conflit ne se produit que quand les mêmes lignes ont été modifiées dans les deux branches. Si deux branches modifient des fichiers différents, ou des parties différentes du même fichier, Git fusionne tout seul.

Étape 02 / 09

Quand un conflit arrive-t-il ?

Voici un exemple concret :

1

Tu crées une branche depuis main. Le fichier index.html contient : "Hello".

2

Sur ta branche, tu changes "Hello" en "Bonjour". Tu fais un commit avec ce changement.

3

Pendant ce temps, quelqu'un change "Hello" en "Welcome" sur main. Un commit est fait sur main avec ce changement.

4

Tu essaies de fusionner ta branche dans main. Git dit : "Conflit ! La même ligne a été changée des deux côtés."

A
« Bonjour »
B
feature
A
« Welcome »
C
main

git merge → même ligne modifiée des deux côtés

Les deux branches ont changé la même ligne du même fichier : Git ne peut pas choisir, il te demande.

Étape 03 / 09

Lire les marqueurs de conflit

Concept

Mot clé : marqueurs de conflit Quand un conflit se produit, Git ajoute des marqueurs dans le fichier. Ces marqueurs montrent les deux versions côte à côte. Ils commencent par <<<<<<< et finissent par >>>>>>>.

Voici à quoi ressemble un fichier avec un conflit :

<<<<<<< HEADta version (la branche où tu es)

Bonjour

=======le séparateur entre les deux versions

Welcome

>>>>>>> feature/headerla version de l'autre branche
Tout ce qui est entre les marqueurs est à toi : garde une version, l’autre, ou un mélange, puis supprime les 3 marqueurs.

Chaque marqueur a un rôle précis :

  • <<<<<<< HEAD — Début du conflit. Ce qui suit vient de ta branche (celle où tu es).
  • ======= — Séparateur. Il sépare les deux versions. Au-dessus : ta branche. En-dessous : l'autre branche.
  • >>>>>>> feature/header — Fin du conflit. Le nom après les flèches est le nom de l'autre branche.

Dans un conflit, quel marqueur sépare TES changements de ceux de l'autre branche ?

Étape 04 / 09

Résoudre un conflit : les 4 étapes

La résolution d'un conflit suit toujours les mêmes étapes. Pas de panique. Suis ce processus.

Tout commence par un merge qui échoue. Voici ce que Git affiche à ce moment-là :

$ git merge feature/header

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

Étape 1 : Voir quels fichiers sont en conflit

Tape git status. Les fichiers en conflit apparaissent en rouge avec la mention "both modified".

$ git status

both modified: index.html

Étape 2 : Lire le fichier avec les marqueurs

Ouvre le fichier dans ton éditeur pour voir les deux versions, ou affiche-le directement dans le terminal avec cat index.html.

Étape 3 : Écrire le contenu final

Supprime les marqueurs <<<<<<<, ======= et >>>>>>>. Garde la version que tu veux. Tu peux garder une version, l'autre, ou un mélange des deux.

# Par exemple :

$ echo "<footer>Version finale</footer>" > index.html

Étape 4 : Marquer comme résolu et commiter

Dis à Git que le conflit est résolu. Utilise git add pour marquer le fichier comme résolu. Puis fais un commit pour terminer la fusion.

$ git add index.html

$ git commit -m "Resolve conflict"

[main f7a8b9c] Resolve conflict

Astuce

C'est terminé : le commit de merge est créé et le conflit appartient au passé. git status doit afficher "nothing to commit, working tree clean".

Tu as édité le fichier en conflit et retiré les marqueurs. Ensuite ?

Étape 05 / 09

Annuler un merge en cours

Concept

Mot clé : git merge --abort Si tu es perdu pendant un conflit, tu peux tout annuler. La commande git merge --abort revient à l'état d'avant le merge. Rien n'est perdu. Tu peux recommencer quand tu es prêt.

$ git merge --abort

# Annule le merge en cours
# Tu reviens à l'état d'avant
# Tu peux réessayer quand tu veux

Quelle commande annule proprement un merge en cours ?

Étape 06 / 09

Comment réduire les conflits

Les conflits sont normaux. Mais tu peux les réduire avec quelques bonnes pratiques :

  • Fais des petits commits — Moins tu modifies de lignes, moins tu risques de conflit. Un commit = une action.
  • Fusionne souvent — Plus tu attends pour fusionner, plus les branches divergent. Plus elles divergent, plus les conflits sont probables.
  • Communique avec ton équipe — Si tu sais que quelqu'un travaille sur le même fichier, coordonne-vous. C'est le meilleur moyen d'éviter les surprises.
  • Découpe ton code en petits fichiers — Plus les fichiers sont petits, moins il y a de chances que deux personnes modifient le même.

Étape 07 / 09

Erreurs fréquentes

Résoudre un conflit est simple quand on suit les étapes. Ces quelques pièges expliquent la plupart des mauvaises surprises :

  • Laisser les marqueurs <<<<<<< dans le code. Le fichier ne fonctionnera pas avec les marqueurs dedans. Tu dois les supprimer.
  • Faire git add + git commit sans vérifier le contenu du fichier. Lis toujours le fichier après avoir résolu le conflit.
  • Supprimer le contenu de l'autre personne sans le lire. Prends le temps de comprendre les deux versions avant de choisir.
  • Paniquer et toujours faire git merge --abort. C'est bien de savoir que ça existe. Mais résoudre un conflit est une compétence importante.

Étape 08 / 09

Pour aller plus loin

Tu veux creuser ? Ces ressources prolongent ce chapitre :

  • Guide complet : résoudre un conflit de merge
  • git rebase : une alternative au merge
  • git stash : mettre de côté son travail temporairement
  • Formation Confiance Git : la prochaine étape

Étape 09 / 09

Teste tes connaissances

Avant de passer aux exercices, vérifie que tu sais résoudre un conflit. Clique sur la réponse qui te semble correcte.

Quiz — Chapitre 4

1. Quand un conflit de merge se produit-il ?

2. Que signifie le marqueur ======= dans un fichier en conflit ?

3. Après avoir résolu un conflit dans un fichier, que fais-tu ?

4. Que fait git merge --abort ?

Ton avis compte

Aide-nous à améliorer cette formation en partageant ton retour.

Pour qu'on puisse te répondre si besoin.