Versioning avec Git & GitHub · Étape 13

Résous un conflit de contenu avec preuves avant et après

Observe les trois versions d’un fichier en conflit, choisis une résolution métier et vérifie qu’aucun marqueur ne subsiste.

Durée indicative · ~1 h 40Niveau intermédiairePrérequis conseillé · Leçon 12 — fast-forward et merge commitPratique · TP
L’idée reçue

« Un conflit signifie que Git est cassé ou que les deux branches sont incompatibles. »

Git signale seulement qu’il ne peut pas choisir automatiquement entre des changements qui touchent la même zone. La décision appartient à l’équipe.

01Observe les deux intentions

cd /tmp/soria-git-branches-$USER/conflict
git show main:application.conf
git show feature/performance:application.conf
git log --oneline --decorate --graph --all

Main impose un mode sécurisé. La branche feature augmente les workers et active un mode performance.

02Provoque le conflit

git switch main
git merge feature/performance || true
git status
git status --short
git diff --name-only --diff-filter=U

03Lis les marqueurs

cat application.conf
<<<<<<< HEAD
mode=secure
workers=2
||||||| parent
mode=standard
workers=2
=======
mode=performance
workers=4
>>>>>>> feature/performance

Avec merge.conflictStyle=zdiff3, la base commune apparaît également. Elle aide à comprendre ce que chaque côté a réellement changé.

04Inspecte les stages de l’index

git ls-files -u
git show :1:application.conf
git show :2:application.conf
git show :3:application.conf
Stage
Sens
Contenu
1
base commune
avant divergence
2
ours
branche courante
3
theirs
branche fusionnée

05Choisis une résolution métier

cat > application.conf <<'TXT'
mode=secure-performance
workers=4
TXT

git diff -- application.conf
git add application.conf
git diff --cached

La résolution ne consiste pas obligatoirement à choisir un côté. Ici, elle combine sécurité et capacité après validation fonctionnelle.

06Termine ou abandonne

git commit -m "merge: resolve secure performance configuration"
git status --porcelain
git show -s --format='%H%nparents=%P%n%s' HEAD

Pour renoncer avant le commit, utilise git merge –abort. N’utilise pas reset hard par réflexe.

07Recherche les marqueurs résiduels

grep -RniE '^(<<<<<<<|=======|>>>>>>>|\|\|\|\|\|\|\|)' . \
  --exclude-dir=.git || true
git diff --check HEAD~1 HEAD
git status --porcelain

08Teste la configuration résultante

Une fusion techniquement terminée peut être fonctionnellement incorrecte. Exécute les tests, validateurs ou commandes d’exploitation propres au projet avant d’accepter le merge.

Challenge autonome

Justifie la résolution

Conserve les versions base, ours et theirs, rédige la décision métier, résous le fichier puis prouve l’absence de marqueurs et la présence d’un commit à deux parents.

Ce que tu retiens

Un conflit est une demande de décision. La bonne résolution s’appuie sur les trois versions, une intention métier, des tests et une preuve d’état propre.

Ta progression

Chargement de l’état… Se connecter pour synchroniser.