Ce que vous accomplirez
Vous créerez un conflit de merge délibérément, parcourrez la résolution, et apprendrez les outils et patterns qui rendent les conflits non-effrayants.
Étape 1 : configurer un sandbox
mkdir conflict-tutorial && cd conflict-tutorial
git init
cat > recipe.txt <<'EOF'
Recette de sauce tomate
Ingrédients :
- 1 oignon haché
- 2 gousses d'ail
- 1 boîte de tomates
EOF
git add recipe.txt
git commit -m "Recette initiale"
Étape 2 : créer deux branches divergentes
git checkout -b add-basil
sed -i.bak 's/2 gousses d.ail/2 gousses d.ail\n- poignée de basilic/' recipe.txt && rm recipe.txt.bak
git commit -am "Add basil"
git checkout -b add-oregano main
sed -i.bak 's/2 gousses d.ail/2 gousses d.ail\n- pincée d.origan/' recipe.txt && rm recipe.txt.bak
git commit -am "Add oregano"
Étape 3 : déclencher le conflit
git checkout main
git merge add-basil
git merge add-oregano
Étape 4 : lire les marqueurs de conflit
<<<<<<< HEAD
- poignée de basilic
=======
- pincée d'origan
>>>>>>> add-oregano
Étape 5 : résoudre
- 2 gousses d'ail
- poignée de basilic
- pincée d'origan
- 1 boîte de tomates
Étape 6 : stage et compléter le merge
git add recipe.txt
git status
git merge --continue
Outils qui aident
git mergetool
git config --global merge.tool vimdiff
Abandonner
git merge --abort
Patterns courants
- Prendre un côté entier :
git checkout --ours fileougit checkout --theirs file. - Prendre les deux : combiner manuellement.
- Redémarrer le merge :
git merge --abort.
Inspecter avant de résoudre
git diff
git log --merge -p <file>
git show :1:<file>
git show :2:<file>
git show :3:<file>
Rerere pour conflits répétés
git config --global rerere.enabled true