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 :
git merge feature→ fusion d'une branchegit pull origin main→ récupérer les changements du remotegit rebase main→ réappliquer tes commits sur maingit stash pop→ réappliquer du code mis de côté
É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 :
<<<<<<< HEAD→ début de TA version (la branche où tu es)=======→ séparation entre les deux versions>>>>>>> feature→ fin de LEUR version (la branche qu'on fusionne)
É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 :
- Accept Current Change → garder ta version (HEAD)
- Accept Incoming Change → garder leur version
- Accept Both Changes → garder les deux
- Compare Changes → voir les deux côte à côte
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
- Pull souvent :
git pull origin mainrégulièrement pour rester à jour - Petits commits : des commits fréquents sur des fichiers différents réduisent les conflits
- Communiquer : si deux personnes modifient le même fichier, coordonnez-vous
- Branches courtes : plus une branche vit longtemps, plus elle diverge de main
Résumé
| Étape | Commande |
|---|---|
| Voir les conflits | git status |
| Ouvrir et éditer | Supprimer les marqueurs, choisir le bon code |
| Marquer comme résolu | git add fichier.js |
| Finaliser | git commit |
| Annuler si besoin | git 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.