Git Branching y Merging
Fusión (Merging) de Ramas
Fusión (Merging) de Ramas en Git
La fusión de ramas (merging) en Git es el proceso de combinar cambios realizados en diferentes ramas para integrarlos en una sola rama. Esto es esencial para consolidar el trabajo de equipo y finalizar características o correcciones de errores en la rama principal del proyecto.
Tipos de Fusión en Git
Git proporciona varias maneras de realizar una fusión. Los dos tipos más comunes son:
- Fast-Forward Merge: Esta fusión ocurre cuando la rama de destino se encuentra directamente detrás de la rama que se está fusionando. Git simplemente mueve el puntero hacia adelante.
- Three-Way Merge: Este tipo de fusión ocurre cuando las ramas han evolucionado de manera independiente. Git utilizará tres puntos: los dos últimos commits de cada rama y su ancestro común más reciente.
Preparación para la Fusión
Antes de fusionar ramas, es recomendable asegurarse de que el historial local esté actualizado. Para hacerlo, realiza un pull de la rama de destino:
bash
Esto asegura que la rama de destino esté al día con el repositorio remoto.
Realizar una Fusión
Para fusionar una rama en la rama actual, usa:
bash
Ejemplo:
Supongamos que estás en main
y quieres fusionar feature-xyz
:
bash
Este comando fusiona feature-xyz
en main
.
Fast-Forward Merge
Si main
no ha avanzado desde que se creó feature-xyz
, Git realizará una fusión fast-forward:
bash
Three-Way Merge
Si tanto main
como feature-xyz
han tenido desarrollos independientes, Git realizará una fusión de tres vías:
bash
Visualización de Fusiones
Después de una fusión exitosa, puedes visualizar el historial de commits con:
bash
Este comando muestra un grafo del historial de commits, permitiendo ver claramente las ramas y las fusiones.
Abortar una Fusión
Si te encuentras con problemas durante la fusión, puedes abortarla:
bash
Esto revertirá el estado del repositorio a como estaba antes de intentar la fusión.
Manejo de Conflictos de Fusión
A veces, cuando Git no puede combinar automáticamente los cambios, ocurren conflictos de fusión. Los conflictos de fusión deben resolverse manualmente.
- Identificación del Conflicto: Git marcará los conflictos en los archivos afectados e indicará los conflictos al intentar hacer un merge.
- Resolución del Conflicto: Edita los archivos conflictivos para resolver los conflictos manualmente.
- Agrega los Archivos Resueltos: Una vez resueltos los conflictos, agrega los archivos para prepararlos para el commit:
bash
- Finaliza la Fusión con un Commit:
bash
Resumen
- Preparar la rama para la fusión:
git pull origin <rama-destino>
- Fusión básica:
git merge <nombre-de-la-rama>
- Fast-Forward Merge: Se realiza automáticamente si no hay cambios divergentes.
- Three-Way Merge: Se realiza automáticamente si hay cambios divergentes.
- Visualización:
git log --oneline --graph --all
- Abortar una fusión:
git merge --abort
- Resolver conflictos de fusión manualmente
Hacer una fusión correctamente es crucial para mantener un historial de proyecto limpio y coherente. En los próximos capítulos, profundizaremos en la resolución de conflictos de fusión y otras estrategias avanzadas de fusión.
- Introducción a Git
- Configuración Inicial y Flujo de Trabajo Básico
- Conceptos Básicos de Ramas en Git
- Creación y Eliminación de Ramas
- Navegación entre Ramas
- Fusión (Merging) de Ramas
- Resolución de Conflictos de Fusión
- Estrategias de Fusión: Fast-Forward vs. Recursive
- Rebase en Git: Conceptos y Usos
- Fusión vs. Rebase: Cuándo Usar Cada uno
- Ramas Remotas y su Gestión
- Git Flow y otros Modelos de Flujo de Trabajo
- Buenas Prácticas para Branching y Merging
- Herramientas y Comandos Avanzados
- Conclusión y Recomendaciones Finales