Cuando dos ramas modifican las mismas líneas del mismo archivo, Git no puede fusionar automáticamente y te pide que decidas. Resolver un conflicto da miedo la primera vez, mucho menos la segunda.
Cómo se produce un conflicto
Imagina: en main, la línea 1 de README.md dice "Hola". En tu rama mi-feature, la cambiaste a "Buenas". Mientras tanto, alguien en main la cambió a "Hey". Git no sabe cuál conservar.
Cuando ejecutas la fusión:
Git se detiene con un mensaje: CONFLICT (content): Merge conflict in README.md.
Leer los marcadores de conflicto
Abre el archivo en conflicto. Verás algo así:
<<<<<<< HEAD
Hey
=======
Buenas
>>>>>>> mi-feature<<<<<<< HEAD: inicio del bloque en conflicto, versión de la rama actual (aquímain).=======: separador entre las dos versiones.>>>>>>> mi-feature: fin del bloque, versión de la rama entrante.
Resolver el conflicto
Edita el archivo manualmente para quedarte con lo que quieras. Elimina los tres marcadores y escribe la versión final:
Hola y buenasO conserva una de las dos versiones, o escribe algo completamente diferente. Tú decides.
Finalizar la resolución
Una vez editados todos los archivos en conflicto, hazles stage y commitea:
Git genera automáticamente un mensaje de merge commit que puedes aceptar o modificar.
Para ver qué archivos siguen en conflicto en cualquier momento:
Los archivos en conflicto aparecen bajo "both modified". Mientras quede alguno, la fusión no está terminada.
Cancelar una fusión en curso
Si te das cuenta de que tomaste el enfoque equivocado y quieres anular todo:
Git restaura el estado exacto de antes de la fusión. No se pierde nada.
git-scm.com - git merge