Reto 003 - Provocar y resolver un conflicto de merge
Escenario
Vas a provocar un conflicto a propósito para aprender a resolverlo con calma. Crearás dos ramas que modifican la misma línea de un archivo, intentarás mergearlas y resolverás el conflicto resultante.
Un conflicto no es un error: es Git pidiéndote que decidas qué versión conservar.
Cómo resolverlo
# --- Preparar el escenario ---
# En main, crear un archivo con una linea
echo "Titulo original" > titulo.txt
git add titulo.txt
git commit -m "Agrega titulo original"
# Crear rama feature y cambiar la MISMA linea
git switch -c feature
echo "Titulo desde feature" > titulo.txt
git commit -am "Cambia titulo en feature"
# Volver a main y cambiar la misma linea de forma distinta
git switch main
echo "Titulo desde main" > titulo.txt
git commit -am "Cambia titulo en main"
# --- Provocar el conflicto ---
git merge feature
# CONFLICT (content): Merge conflict in titulo.txt
# Automatic merge failed; fix conflicts and then commit the result.
Por qué ocurre
Ambas ramas modificaron la misma línea de titulo.txt. Git puede fusionar cambios que están en zonas distintas, pero cuando dos ramas tocan la misma línea de forma diferente, no puede adivinar cuál quieres: te pide que decidas.
Solución completa
Ver solución comentada
# 1. Ver que archivo esta en conflicto
git status
# both modified: titulo.txt
# 2. Abrir titulo.txt: veras los marcadores de conflicto
# <<<<<<< HEAD
# Titulo desde main
# =======
# Titulo desde feature
# >>>>>>> feature
# 3. Editar el archivo para dejar la version correcta y BORRAR los marcadores.
# Por ejemplo, decides quedarte con una mezcla:
echo "Titulo definitivo" > titulo.txt
# 4. Marcar el conflicto como resuelto
git add titulo.txt
# 5. Cerrar el merge con un commit (Git ya trae un mensaje por defecto)
git commit -m "Resuelve conflicto en titulo.txt"
# Verificar
git log --oneline --graph
Si te bloqueas: git merge --abort cancela el merge y te devuelve al estado anterior, como si nunca lo hubieras intentado.
Clave: hay que borrar los tres marcadores (<<<<<<<, =======, >>>>>>>) antes de hacer git add. Git no valida que lo hayas hecho; confía en que dejaste el archivo correcto.