ตัวอย่างบทเรียน

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).

conflicto de fusión (merge conflict) marcadores de conflicto resolución de conflictos
คุณจะเรียนรู้อะไรในบทเรียนนี้
  • 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.

จุดเริ่มต้นของบทเรียน

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"'

บทเรียนฉบับเต็มใช้ได้เมื่อสมัครสมาชิก

ฉบับเต็มมีสไลด์เพิ่มอีก 34 สไลด์

วิดีโอ สไลด์ทั้งหมด โน้ต แบบทดสอบ AI ติวเตอร์ และการสัมภาษณ์จะเปิดหลังเข้าสู่ระบบและสมัครสมาชิก

เข้าสู่ระบบหรือลงทะเบียน สมัครสมาชิก

เนื้อหาบทเรียน

  1. Tres tipos de conflictos de fusión
  2. Anatomía de un conflicto complejo
  3. Estrategias para resolver conflictos
  4. Prevención y mejores prácticas
  5. Cómo leer conflictos multilínea en Git
  6. Descifrando marcadores de contexto
  7. Conflictos anidados: estrategias de resolución
  8. Automatización y herramientas avanzadas
  9. Estrategia de elección: ¿HEAD o rama?
  10. El principio de 'la menor sorpresa'
  11. Conflictos semánticos: enemigos invisibles
  12. Herramientas y automatización
  13. Elección de herramientas: cuándo usar cada una
  14. VS Code: configuración y características avanzadas
  15. Beyond Compare: Escenarios para conflictos complejos
  16. Integración en Git flow y automatización
  17. Automatizando la fusión con .gitattributes
  18. Escribiendo nuestro propio controlador de fusión
  19. Git rerere — tu asistente personal
  20. Estrategias avanzadas de automatización
  21. Diseñando workflow para equipos grandes
  22. Code Review como herramienta de prevención de conflictos
  23. Estrategias para ramas de características de larga duración
  24. Herramientas y automatización para resolver conflictos
  25. Peligros de aceptar cambios sin revisar
  26. Estrategias seguras para resolver conflictos
  27. Pruebas después de la fusión: qué verificar
  28. Integración con CI/CD y medidas preventivas
  29. Cómo difieren los conflictos en rebase frente a merge
  30. Trabajando con --rebase-merges
  31. Estrategias para resolver conflictos secuenciales
  32. Técnicas avanzadas y depuración de rebase
  33. CI/CD como sistema de control de calidad
  34. GitHub Actions: verificación de conflictos
  35. Danger-JS: automatización inteligente de revisiones
  36. Resolución automática de conflictos en CI/CD
  37. Conflictos: del pánico a la confianza

บทความเกี่ยวกับบทเรียนนี้

บทเรียนทั้งหมดในคอร์สนี้

  1. Introducción: Git desde cero hasta desarrollador seguro
  2. Por qué necesitamos Git y por qué es imprescindible para conseguir trabajo
  3. Instalación y configuración: preparando Git para su primer uso
  4. Primer repositorio: init, add, commit y la magia del índice
  5. Leyendo el historial: log, diff, show y navegación por el pasado
  6. Ramas: la realidad paralela de tu código
  7. Deshaciendo cambios: restore, reset, revert — correcto y peligroso
  8. GitHub y repositorios remotos: tu código en la nube
  9. Trabajo en equipo: forks, ramas de características y pull requests
  10. Conflictos de fusión: no entres en pánico, comprende y resuelve
  11. Flujos de trabajo con Git en equipos reales: ¿qué workflow elegir?
  12. Herramientas avanzadas: rebase, stash, cherry-pick y etiquetas
  13. Proyecto final: simulando un desarrollo en equipo real