Conflictos de fusión: no entres en pánico, comprende y resuelve
Los conflictos pueden asustar a los principiantes, pero después de esta sección los enfrentarás con calma. Analizaremos por qué ocurren los conflictos (Git no lee la mente y no sabe qué cambio es más importante), cómo leer los marcadores de conflicto y cómo elegir la solución correcta. Mostraremos dos enfoques: la resolución manual y el uso de herramientas de fusión (merge tools).
- Comprenderás la naturaleza de los conflictos de fusión y dejarás de temerles, volviéndolos algo predecible.
- Serás capaz de resolver un conflicto manualmente interpretando correctamente los marcadores de Git.
- Aprenderás a configurar una herramienta de fusión en tu editor para resolver conflictos de manera visual.
Simula ng leksyon
Tres tipos de conflictos de fusión
- De contenido: cambios en las mismas líneas
- De renombrado: un archivo se modificó y renombró
- De eliminación: un archivo se borró en una rama y se modificó en otra
- Los renombrados son los más complicados para Git
- Verifica el historial del archivo ante conflictos sospechosos
Imagina que estás trabajando en un proyecto importante y de repente Git reporta un conflicto. El primer paso para resolverlo es identificar su tipo. Los conflictos de contenido ocurren cuando se modifican las mismas líneas en diferentes ramas. Los renombrados son más complejos: un desarrollador cambia el nombre del archivo mientras otro edita su contenido. El tercer tipo son las eliminaciones, cuando un archivo desaparece en una rama pero continúa existiendo en otra. Los renombrados suelen ser los más problemáticos porque Git no siempre rastrea correctamente el historial después de cambiar el nombre. Por eso, ante conflictos sospechosos, siempre revisa el historial de cambios de los archivos.
Anatomía de un conflicto complejo
- Los marcadores <<<<<<< muestran tus cambios
- ======= separa tu versión de la de otros
- >>>>>>> marca el final del bloque conflictivo
- git status mostrará todos los archivos problemáticos
- git diff — comparación detallada de cambios
Supongamos que estás fusionando la rama feature en main y ves un mensaje de conflicto. Abre los archivos problemáticos: notarás marcadores especiales. Todo lo que está entre <<<<<<< HEAD y ======= son tus cambios. Entre ======= y >>>>>>> feature están los cambios de la rama que estás fusionando. Usa git status para ver todos los archivos en conflicto, y git diff para una vista detallada de las diferencias. Recuerda: los marcadores no son un error, sino una guía que indica dónde debes tomar una decisión.
#!/bin/bash
# conflict_analysis.sh
echo "Creando un repositorio de prueba"
mkdir conflict-demo && cd conflict-demo
git init
echo "Creando archivo y primer commit en main"
echo 'Line 1' > file.txt
echo 'Line 2' >> file.txt
git add . && git commit -m 'Commit inicial'
echo "Creando rama feature y modificando primera línea"
git checkout -b feature
sed -i 's/Line 1/Line 1 modificado en feature/' file.txt
git commit -am 'Modificar línea 1 en feature'
echo "Volviendo a main y modificando la misma línea"
git checkout main
sed -i 's/Line 1/Line 1 modificado en main/' file.txt
git commit -am 'Modificar línea 1 en main'
echo "Intentando fusionar ramas"
git merge feature || echo '¡Conflicto!'
echo "\nMostrando estado:"
git status --short
echo "\nMostrando archivo conflictivo:"
cat file.txt
Estrategias para resolver conflictos
- Edición manual: eliminar marcadores, conservar lo necesario
- Herramientas GUI: meld, kdiff3 para comparación visual
- --ours/--theirs: aceptar tu versión o la de otros
- En rebase, los conflictos se resuelven por cada commit
- Después de resolver — no olvides git add y git commit
Cuando se detecta un conflicto, tienes varias opciones. Puedes abrir el archivo manualmente y editarlo, eliminando los marcadores y conservando el código deseado. Para los más visuales, herramientas como meld o kdiff3 son ideales, ya que muestran tres versiones del archivo simultáneamente. Si estás seguro de tus cambios, usa git checkout --ours para mantener tu versión, o --theirs para aceptar la de otros. Ten especial cuidado con rebase: aquí los conflictos pueden surgir en cada commit que se está reubicando.
#!/bin/bash
# resolve_strategies.sh
echo "Método 1: Resolución manual"
echo 'Edita el archivo eliminando los marcadores de conflicto'
echo 'Luego ejecuta: git add file.txt'
echo "\nMétodo 2: Aceptar nuestra versión"
git checkout --ours file.txt
echo "\nMétodo 3: Aceptar su versión"
git checkout --theirs file.txt
echo "\nMétodo 4: Usar herramienta de fusión"
echo 'git mergetool --tool=meld'
echo "\nDespués de elegir el método, completa la fusión:"
echo 'git commit -m "Resolve merge conflict"'
Buong leksyon ay para sa subscription
34 pang slide sa buong bersyon.
Mabubuksan ang video, lahat ng slide, tala, pagsusulit, AI tutor, at interview pagkatapos mag-sign in at mag-subscribe.
Mag-sign in o magparehistro Mag-subscribeNilalaman ng leksyon
- Tres tipos de conflictos de fusión
- Anatomía de un conflicto complejo
- Estrategias para resolver conflictos
- Prevención y mejores prácticas
- Cómo leer conflictos multilínea en Git
- Descifrando marcadores de contexto
- Conflictos anidados: estrategias de resolución
- Automatización y herramientas avanzadas
- Estrategia de elección: ¿HEAD o rama?
- El principio de 'la menor sorpresa'
- Conflictos semánticos: enemigos invisibles
- Herramientas y automatización
- Elección de herramientas: cuándo usar cada una
- VS Code: configuración y características avanzadas
- Beyond Compare: Escenarios para conflictos complejos
- Integración en Git flow y automatización
- Automatizando la fusión con .gitattributes
- Escribiendo nuestro propio controlador de fusión
- Git rerere — tu asistente personal
- Estrategias avanzadas de automatización
- Diseñando workflow para equipos grandes
- Code Review como herramienta de prevención de conflictos
- Estrategias para ramas de características de larga duración
- Herramientas y automatización para resolver conflictos
- Peligros de aceptar cambios sin revisar
- Estrategias seguras para resolver conflictos
- Pruebas después de la fusión: qué verificar
- Integración con CI/CD y medidas preventivas
- Cómo difieren los conflictos en rebase frente a merge
- Trabajando con --rebase-merges
- Estrategias para resolver conflictos secuenciales
- Técnicas avanzadas y depuración de rebase
- CI/CD como sistema de control de calidad
- GitHub Actions: verificación de conflictos
- Danger-JS: automatización inteligente de revisiones
- Resolución automática de conflictos en CI/CD
- Conflictos: del pánico a la confianza
Mga artikulo tungkol sa araling ito
- git merge: paano pagsamahin ang mga branch at ayusin ang conflict
- Git at GitHub: ano ang pagkakaiba at paano sila magkaugnay
- Paano mag-install ng Git sa Windows, macOS, at Linux
- Ano ang Git at bakit ito kailangan ng developer
- Git Bash: ano ito at paano gamitin sa Windows
Lahat ng leksyon ng kurso
- Introducción: Git desde cero hasta desarrollador seguro
- Por qué necesitamos Git y por qué es imprescindible para conseguir trabajo
- Instalación y configuración: preparando Git para su primer uso
- Primer repositorio: init, add, commit y la magia del índice
- Leyendo el historial: log, diff, show y navegación por el pasado
- Ramas: la realidad paralela de tu código
- Deshaciendo cambios: restore, reset, revert — correcto y peligroso
- GitHub y repositorios remotos: tu código en la nube
- Trabajo en equipo: forks, ramas de características y pull requests
- Conflictos de fusión: no entres en pánico, comprende y resuelve
- Flujos de trabajo con Git en equipos reales: ¿qué workflow elegir?
- Herramientas avanzadas: rebase, stash, cherry-pick y etiquetas
- Proyecto final: simulando un desarrollo en equipo real