🔀 Ramas, Fusión y Manejo de Conflictos en Git
Cuando varios desarrolladores trabajan en paralelo sobre el mismo proyecto, las líneas de código divergen inevitablemente. Aprender a ramificar, fusionar y resolver los conflictos resultantes con precisión técnica es una habilidad imprescindible.
En esta lección aprenderás:
- Cómo crear, cambiar y aislar trabajo en ramas con
git branchygit switch. - Cómo integrar historias con
git merge(fast-forward vs merge commit). - Qué es exactamente un conflicto de integración y por qué ocurre.
- Cómo interpretar los marcadores de conflicto (
<<<<<<<,=======,>>>>>>>). - El procedimiento paso a paso para resolver conflictos, testear y cerrar la fusión de forma limpia.
🌿 FUSIONAR RAMAS (MERGE) — EXPLICADO DESPACIO
🧠 Idea clave (primero la idea, luego los comandos)
Imagina esto:
- Rama
main→ versión estable del proyecto - Rama
login→ estás trabajando una nueva función
👉 Fusionar (merge) significa:
Traer los cambios de una rama a otra
Normalmente:
- Trabajas en una rama secundaria
- Fusionas esa rama en
main
📊 Ejemplo visual de bifurcación y merge
login bifurca desde B y avanza en paralelo a main. Si ambas modifican las mismas líneas, Git inserta marcadores de conflicto antes de sellar el merge commit F.🧪 EJEMPLO REAL PASO A PASO (sin conflictos)
Paso 1️⃣ Crear proyecto
# Inicializar repositorio de prueba
git init
Crear archivo:
mensaje.txt
Hola mundo
# Preparar y crear el commit inicial en main
git add .
git commit -m "chore: mensaje inicial"
Paso 2️⃣ Crear una rama nueva
# Crear la rama secundaria y saltar a ella
git checkout -b login
📌 Ahora estás en la rama login.
Paso 3️⃣ Cambiar algo en la rama nueva
Editar mensaje.txt:
Hola mundo
Agregando pantalla de login
Guardar:
# Confirmar el cambio en la rama login
git add .
git commit -m "feat: agrego pantalla de login"
Paso 4️⃣ Volver a main
# Volver a la rama principal (los archivos se restauran a su estado en main)
git checkout main
📌 OJO: el archivo vuelve a su versión original en main.
Paso 5️⃣ Fusionar la rama login
# Traer e integrar los cambios de login en main
git merge login
🎉 Merge exitoso sin conflictos (Fast-Forward o auto-merge limpio)
⚠️ AHORA: CONFLICTOS (lo importante)
🧠 ¿Cuándo hay conflictos?
Hay conflicto cuando:
- Dos ramas
- Cambian la misma línea
- De forma diferente
Git no sabe cuál elegir 🤯
💥 EJEMPLO REAL DE CONFLICTO
Paso 1️⃣ Estado inicial
Archivo mensaje.txt en main:
Hola mundo
Paso 2️⃣ Rama login cambia el archivo
# Crear la rama de trabajo para la función
git checkout -b login
Hola mundo desde login
# Preparar y confirmar la línea modificada en la rama login
git add .
git commit -m "feat: cambio texto en login"
Paso 3️⃣ Volver a main y cambiar lo mismo
# Regresar a la rama main
git checkout main
Hola mundo desde main
# Modificar la misma línea con otro contenido y confirmar en main
git add .
git commit -m "feat: cambio texto en main"
Paso 4️⃣ Intentar fusionar (BOOM 💥)
# Intentar integrar la rama login en main (aquí Git detecta la colisión)
git merge login
Git responde:
CONFLICT (content): Merge conflict in mensaje.txt
Automatic merge failed; fix conflicts and then commit the result.
🔍 QUÉ ES UN CONFLICTO (POR DENTRO)
Abres mensaje.txt y ves:
<<<<<<< HEAD
Hola mundo desde main
=======
Hola mundo desde login
>>>>>>> login
¿Qué significa esto?
<<<<<<< HEAD→ lo que está en tu rama actual (main)=======→ separador>>>>>>> login→ lo que viene de la otra rama
🛠️ CÓMO RESOLVER EL CONFLICTO (PASO A PASO)
Paso 1️⃣ Decidir qué queda
Opción A: quedarte con main:
Hola mundo desde main
Opción B: quedarte con login:
Hola mundo desde login
Opción C: combinar:
Hola mundo desde main y login
👉 Tú decides.
Paso 2️⃣ Borrar los marcadores
⚠️ MUY IMPORTANTE Debes borrar:
<<<<<<<
=======
>>>>>>>
Paso 3️⃣ Guardar el archivo
El archivo debe quedar limpio:
Hola mundo desde main y login
Paso 4️⃣ Marcar como resuelto
# Informar a Git que el conflicto en este archivo ya fue resuelto
git add mensaje.txt
Paso 5️⃣ Crear el commit de resolución
# Crear el commit final de merge que sella la resolución del conflicto
git commit -m "merge: resuelvo conflicto entre main y login"
🎉 Conflicto resuelto correctamente.
🔄 Flujo COMPLETO de merge con conflicto
# 1. Intentar la fusión de la rama
git merge login
# 2. Git reporta CONFLICT (content)
# 3. Abrir los archivos afectados en tu editor y resolver los marcadores
# 4. Marcar los archivos resueltos
git add .
# 5. Confirmar el commit de merge
git commit -m "merge: resuelvo conflicto"
🧠 Consejos profesionales
✔️ Haz git pull antes de trabajar
✔️ Haz commits pequeños
✔️ Usa ramas para TODO
✔️ Lee el conflicto con calma
✔️ Git NUNCA borra tu trabajo
❌ Errores comunes
❌ Borrar el archivo completo ❌ Hacer commit sin resolver ❌ Asustarse y cerrar todo 😅
🧠 RESUMEN FINAL
Merge sin conflicto
git checkout main
git merge rama
Merge con conflicto
- Git avisa
- Editas archivo
- Borras marcadores
git addgit commit