Lo que lograrás
Crearás un conflicto de merge deliberadamente, recorrerás la resolución y aprenderás las herramientas y patrones que hacen que los conflictos no sean intimidantes.
Paso 1: configurar un sandbox
mkdir conflict-tutorial && cd conflict-tutorial
git init
cat > recipe.txt <<'EOF'
Receta de salsa de tomate
Ingredientes:
- 1 cebolla picada
- 2 dientes de ajo
- 1 lata de tomates
EOF
git add recipe.txt
git commit -m "Receta inicial"
Paso 2: crear dos branches divergentes
git checkout -b add-basil
sed -i.bak 's/2 dientes de ajo/2 dientes de ajo\n- puñado de albahaca/' recipe.txt && rm recipe.txt.bak
git commit -am "Add basil"
git checkout -b add-oregano main
sed -i.bak 's/2 dientes de ajo/2 dientes de ajo\n- pizca de orégano/' recipe.txt && rm recipe.txt.bak
git commit -am "Add oregano"
Paso 3: disparar el conflicto
git checkout main
git merge add-basil
git merge add-oregano
CONFLICT (content): Merge conflict in recipe.txt
Automatic merge failed; fix conflicts and then commit the result.
Paso 4: leer los marcadores de conflicto
<<<<<<< HEAD
- puñado de albahaca
=======
- pizca de orégano
>>>>>>> add-oregano
Paso 5: resolver
- 2 dientes de ajo
- puñado de albahaca
- pizca de orégano
- 1 lata de tomates
Paso 6: stagear y completar el merge
git add recipe.txt
git status
git merge --continue
Herramientas que ayudan
git mergetool
git config --global merge.tool vimdiff
Abortar
git merge --abort
Patrones comunes
- Tomar un lado entero:
git checkout --ours fileogit checkout --theirs file. - Tomar ambos: combinar manualmente.
- Reiniciar el merge:
git merge --abort.
Inspeccionar antes de resolver
git diff
git log --merge -p <file>
git show :1:<file>
git show :2:<file>
git show :3:<file>
Rerere para conflictos repetidos
git config --global rerere.enabled true