Chuck's Academy

Resolución de conflictos en Git

Estrategias de Merge en Git

Las estrategias de merge en Git son fundamentales para combinar cambios desde diferentes ramas de manera eficiente y con el mínimo de conflictos. Aunque Git intenta resolver los merges automáticamente, en algunos casos es necesario intervenir manualmente. A continuación, exploramos las estrategias de merge más comunes y cómo aplicarlas.

Estrategia de Merge: Fast-Forward

El merge "fast-forward" se utiliza cuando la rama de destino se puede avanzar directamente al punto de la rama de origen sin necesidad de crear un commit de merge. Esto sucede cuando no se han realizado commits adicionales en la rama de destino desde que se bifurcó.

bash

Si main no tiene commits adicionales desde que feature se creó, el merge será un fast-forward.

Estrategia de Merge: Recursive

La estrategia recursiva es la predeterminada en Git. Se usa cuando las ramas tienen historial diferente y no se puede hacer un fast-forward. Esta estrategia combina las ramas creando un commit de merge.

bash

Al utilizar --no-ff, se fuerza la creación de un commit de merge, incluso si se podría hacer un fast-forward.

Estrategia de Merge: Ours

La estrategia "ours" se utiliza en casos donde deseas mantener todos los cambios en tu rama actual y desechar los de la rama fusionada. Es útil en situaciones donde sabes que tu rama tiene la implementación correcta:

bash

Estrategia de Merge: Theirs

Git no proporciona directamente una opción "theirs" en la línea de comandos. Sin embargo, puedes lograr el mismo efecto resolviendo manualmente cada conflicto a favor de los cambios entrantes. Esto es útil en casos donde sabes que la rama que estás fusionando tiene los cambios correctos.

bash

Estrategia de Merge: Octopus

La estrategia "octopus" se utiliza al combinar más de dos ramas. Es especialmente útil en proyectos grandes con múltiples ramas de características. Sin embargo, no se recomienda para merges con conflictos complejos.

bash

Placeholder para Imagen Explicativa

Estrategia de Rebase

El rebase es una alternativa al merge que se usa para re-aplicar tus commits sobre la punta de otra rama, proporcionando una historia de commits más limpia y lineal.

bash

Al rebasear feature sobre main, Git toma los commits en feature y los aplica encima de main, lo que puede resultar en una historia más limpia.

Ejemplo de Resolución de Conflictos en Rebase

Si encuentras un conflicto durante el rebase:

bash

Git pausará en el commit conflictivo, permitiéndote resolver el conflicto:

bash

Si decides que no deseas continuar con el rebase, puedes abortarlo:

bash

¿Cuándo Usar Cada Estrategia?

  • Fast-Forward: Cuando no se han hecho cambios divergentes y deseas mantener la historia.
  • Recursive: Para merges estándar cuando ambas ramas han divergido.
  • Ours: Cuando deseas priorizar los cambios de tu rama.
  • Theirs: Cuando deseas priorizar los cambios de la rama fusionada.
  • Octopus: Para combinar múltiples ramas a la vez, útil en integraciones grandes.
  • Rebase: Para mantener una historia de commits limpia y lineal.

Consejos para Merges Efectivos

  • Revisa la Historia Antes del Merge: Utiliza git log para entender el historial de commits.
  • Utiliza Branches de Característica: Mantén el trabajo separado y fácil de integrar.
  • Resolve Conflictos Inmediatamente: No dejes conflictos sin resolver; pueden complicarse con el tiempo.
  • Comunicación Constante: Mantén al equipo informado sobre el estado de merges y conflictos.

En los próximos capítulos, aplicaremos estas estrategias en ejemplos prácticos y veremos cómo utilizar herramientas específicas para resolver conflictos que puedan surgir.


Pregúntame lo que sea