Un conflicto no es un error: Git se niega a adivinar cuál de dos cambios debe prevalecer. Se arregla editando texto y ejecutando dos comandos. Primero, la salida de emergencia por si estás en pleno ataque de pánico: git merge --abort deja todo como estaba.
🎙️ Publicado y grabado:
git status
# "Unmerged paths:" enumera los archivos con conflictos:
# both modified: config.py
<<<<<<< HEAD
timeout = 30 # ← TU versión (rama actual)
=======
timeout = 60 # ← SU versión (rama entrante)
>>>>>>> feature-x
# todo lo que queda entre los marcadores está en disputa.
# el resto del archivo ya se ha fusionado correctamente.
# conserva tu versión, la suya o escribe una nueva:
timeout = 60
# al terminar deben cumplirse dos cosas:
# 1. el código hace exactamente lo que quieres
# 2. no queda ningún <<<<<<<, ======= o >>>>>>> en el archivo
git add config.py
git commit # git prepara el mensaje de merge: guarda y cierra
# listo. el commit de merge une ambos historiales.
# todo el archivo, mi versión:
git checkout --ours config.py && git add config.py
# todo el archivo, su versión:
git checkout --theirs config.py && git add config.py
# va muy bien con archivos de bloqueo (package-lock.json, etc.).
# a menudo conviene elegir un lado y volver a ejecutar la instalación.
<<<<<<<. Busca <<<<<<< en todo el proyecto antes de confirmar un merge. 2. Resolver con prisas eligiendo un lado a ciegas. Los marcadores muestran qué cambió, pero no por qué. Si ambos cambios parecen intencionados, pregunta a la otra persona. Dos minutos de conversación salen mucho más baratos que romper de nuevo su arreglo.
git rebase --continue, no con commit. La salida de emergencia es git rebase --abort. Durante un rebase, «ours» y «theirs» están intercambiados: lee las etiquetas de los marcadores y no te fíes de la intuición.
git pull often # los merges pequeños y frecuentes ganan a los grandes y escasos
# procura que las ramas duren poco: días, no meses
# no reformatees archivos enteros en el mismo commit que cambia la lógica
# (los diffs de formato son fábricas de conflictos)