16. Fusión: integración de sucursales
El proceso de fusión en Git es una de las operaciones fundamentales que permite la integración de cambios de una rama a otra. En proyectos de software, donde varias líneas de desarrollo ocurren en paralelo, la fusión es esencial para combinar diferentes características o correcciones de errores en un único historial de versiones. En este capítulo, exploraremos los conceptos y las mejores prácticas para realizar fusiones eficientes y seguras con Git y GitHub.
Comprensión de la combinación en Git
merge se utiliza para unir el historial de dos o más ramas. Cuando realizas una fusión, Git intenta automáticamente combinar los cambios de código de las ramas involucradas. Si Git puede hacer esto sin la intervención del usuario, se llama fusión rápida. Sin embargo, cuando hay cambios conflictivos en las mismas piezas de código entre ramas, Git no podrá fusionarse automáticamente, lo que resultará en un conflicto de fusión, que el desarrollador debe resolver manualmente.
Tipos de combinación
Hay básicamente dos tipos de fusiones en Git:
- Fusión de avance rápido: ocurre cuando no hay cambios conflictivos entre ramas. Git simplemente mueve el puntero desde la rama que se está fusionando al punto en la rama que se está fusionando.
- Fusión de tres vías: cuando hay cambios divergentes en las ramas, Git crea una nueva confirmación que representa la fusión de estos cambios. Esta confirmación tiene dos padres, que representan cada una de las ramas que se fusionaron.
Realizar una fusión
Para realizar una fusión, debe estar en la sucursal que recibirá los cambios. Por ejemplo, si desea fusionar la rama feature
en la rama main
, primero debe verificar la rama main
:
git checkout principal
función de fusión de git
Si la combinación es un avance rápido, Git simplemente mueve el puntero de la rama main
hacia adelante. Si es necesaria una combinación de tres vías, Git iniciará el proceso de combinación y, si no hay conflictos, creará una nueva confirmación de combinación.
Resolver conflictos de fusión
Cuando Git encuentra conflictos que no puede resolver automáticamente, detiene el proceso de fusión y marca los archivos en conflicto. Es responsabilidad del desarrollador resolver estos conflictos manualmente. Para ello se deben editar los archivos marcados, eligiendo los cambios de cada rama que se deben conservar o combinar. Después de resolver los conflictos, debes agregar los archivos al área de preparación y finalizar la combinación con una confirmación.
git add <archivo resuelto>
git commit -m "Resolver conflictos de fusión entre característica y principal"
Buenas prácticas de fusión
Para evitar problemas complejos de fusión, estas son algunas de las mejores prácticas:
- Mantenga las ramas actualizadas: combine periódicamente la rama principal (normalmente
main
omaster
) en ramas de características para minimizar el código de divergencia.< /li> - Pequeñas confirmaciones frecuentes: las confirmaciones pequeñas y descriptivas facilitan la comprensión de los cambios y la resolución de conflictos.
- Comunicarse con el equipo: antes de realizar fusiones importantes, es importante comunicarse con el equipo para evitar fusiones sorpresa que puedan causar conflictos importantes.
- Prueba antes de fusionar: asegúrate de que el código de la rama de funciones funcione correctamente antes de fusionarla con la rama principal.
Usando GitHub para fusionar
GitHub ofrece una interfaz gráfica para realizar fusiones a través de solicitudes de extracción (PR). Las relaciones públicas son una excelente manera de revisar el código antes de fusionarlo con la rama principal. También brindan un espacio para la discusión sobre los cambios propuestos.
Para crear un PR en GitHub:
- Envíe la rama de funciones al repositorio remoto.
- Vaya a la página del repositorio en GitHub y haga clic en "Solicitud de extracción".
- Seleccione la rama base (donde se fusionará el código) y la rama de comparación (la que contiene los cambios).
- Complete el título y la descripción del PR y cree la solicitud de extracción.
Después de la revisión del código y la discusión necesaria, el PR se puede fusionar directamente en la interfaz de GitHub, siempre y cuando no haya conflictos que deban resolverse localmente.
Conclusión
Merging es una poderosa herramienta que permite la integración de diferentes líneas de trabajo en un proyecto de software. Comprender cómo realizar fusiones eficientes y resolver conflictos es crucial para mantener un flujo de trabajo de desarrollo colaborativo y fluido. Siguiendo las mejores prácticas y utilizando recCon aplicaciones como Pull Requests en GitHub, los equipos pueden maximizar la eficiencia y minimizar los riesgos asociados con el proceso de fusión.