« 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
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.
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.