Git Merge Conflict : Résoudre un Conflit Pas à Pas

5 min de lecture DevOps

Tu fais git merge ou git pull et tu vois : CONFLICT (content): Merge conflict in fichier.js. Git ne sait pas quelle version garder. Pas de panique — voici comment résoudre ça en 5 minutes.

Pourquoi un conflit apparaît

Un conflit survient quand deux branches modifient la même ligne du même fichier. Git ne peut pas deviner quelle version tu veux garder — il te demande de choisir.

Branche main :    ligne 10 → "const API_URL = '/api/v1';"
Branche feature :  ligne 10 → "const API_URL = '/api/v2';"
                                 ↑ Même ligne, valeur différente = CONFLIT

Les situations classiques :

Étape 1 : Identifier les fichiers en conflit

git status
On branch main
You have unmerged paths.
  (fix conflicts and run "git commit")

Unmerged paths:
  (use "git add <file>..." to mark resolution)
        both modified:   src/config.js
        both modified:   src/utils/api.js

Les fichiers marqués "both modified" sont ceux en conflit.

Étape 2 : Lire les marqueurs de conflit

Ouvre le fichier en conflit. Git a inséré des marqueurs :

const API_URL = 
<<<<<<< HEAD
'/api/v1';    // ← Ta version (branche actuelle)
=======
'/api/v2';    // ← Leur version (branche qu'on merge)
>>>>>>> feature

Comment lire ça :

Étape 3 : Résoudre le conflit

Tu as 4 options :

Option A : Garder ta version

const API_URL = '/api/v1';

Option B : Garder leur version

const API_URL = '/api/v2';

Option C : Combiner les deux (le plus fréquent)

const API_URL = '/api/v2'; // Mise à jour vers v2
const API_URL_LEGACY = '/api/v1'; // Garder l'ancien pour compatibilité

Option D : Réécrire complètement

const API_URL = process.env.API_URL || '/api/v2';

Important : supprime TOUS les marqueurs (<<<<<<<, =======, >>>>>>>). Si tu en laisses un, ton code ne compilera pas.

Étape 4 : Finaliser

# Marquer le fichier comme résolu
git add src/config.js

# Quand TOUS les conflits sont résolus
git commit
# Git propose un message de commit de merge automatique

Résoudre avec VS Code (méthode visuelle)

VS Code détecte les conflits et affiche des boutons cliquables :

C'est la méthode la plus simple pour les débutants.

Cas spécial : annuler le merge

Si c'est trop compliqué et que tu veux revenir en arrière :

# Annuler le merge en cours (revenir à l'état avant)
git merge --abort

# Annuler un rebase en cours
git rebase --abort

# Annuler un pull en cours
git merge --abort

Ça remet tout à l'état d'avant le merge. Aucune donnée perdue.

Comment éviter les conflits

  1. Pull souvent : git pull origin main régulièrement pour rester à jour
  2. Petits commits : des commits fréquents sur des fichiers différents réduisent les conflits
  3. Communiquer : si deux personnes modifient le même fichier, coordonnez-vous
  4. Branches courtes : plus une branche vit longtemps, plus elle diverge de main

Résumé

ÉtapeCommande
Voir les conflitsgit status
Ouvrir et éditerSupprimer les marqueurs, choisir le bon code
Marquer comme résolugit add fichier.js
Finalisergit commit
Annuler si besoingit merge --abort

FAQ

Est-ce que git merge --abort supprime mes changements ?
Non. Il annule uniquement le merge en cours et revient à l'état d'avant. Tes commits sur ta branche sont intacts. C'est totalement sûr.

Pourquoi j'ai un conflit alors que j'ai modifié un fichier différent ?
Vérifie que ce n'est pas le même fichier avec un chemin différent (renommage). Ou c'est peut-être un conflit dans un fichier auto-généré (package-lock.json, yarn.lock). Pour les lockfiles : accepte une version, puis relance npm install.

Comment résoudre un conflit dans package-lock.json ?
N'essaie pas de résoudre manuellement — c'est un fichier auto-généré. Accepte une des deux versions (git checkout --theirs package-lock.json), puis relance npm install pour le regénérer proprement.


Pour les bases de git : les commandes essentielles pour débutants.

Envie de pratiquer ? GoGoKodo propose des ateliers interactifs pour apprendre à coder directement dans le navigateur — 100% gratuit.