El comando Git merge en Git
Lección 42 / 53
Git Guía Git Guía Git español
El comando git merge en Git se utiliza para combinar varias secuencias de commit en un historial unificado. En los casos de uso más frecuentes, git merge se usa para combinar dos ramas.
Por lo general, especialmente para aquellos que usan plataformas como GitHub o GitLab como servidores para el desarrollo compartido, las operaciones de merge se realizan directamente desde la plataforma en el repositorio remoto cuando los cambios en una solicitud de pull/merge se aprueban e incluyen en la rama principal.
Sin embargo, es útil conocer la mecánica básica del merge, ya que es un proceso esencial en Git. En particular es importante considerar que:
- en Git la operación de merge combina secuencias de commit en una única secuencia de commit unificada
- hay dos formas de realizar el merge: Fast Forward y Three Way
- Git puede completar el merge automáticamente si no hay secuencias de commit en conflicto
Antes de continuar con una fusión (merge), es recomendable realizar algunos pasos preparatorios para asegurarse de que la operación se desarrolle sin problemas, especialmente si está ejecutando localmente el merge de branch remotos:
- identificar los dos branch que se desean fusionar, el que recibirá cambios (por ejemplo. main) y lo que se desea unir (por ejemplo new-feature)
- hacer fetch y pull en dichos branch de los respectivos cambios remotos
- hacer checkout en la working copy local del branch que recibirá los cambios
Se podrá entonces iniciar con el merge a través del comando git merge <branch-to-be-merged>.
El modo real y el resultado de la fusión dependen del estado respectivo de las dos ramas.
Fast Forward Merge en Git
git checkout -b new-feature main
git add <file>
git commit -m "Start a feature"
git add <file>
git commit -m "Finish a feature"
git checkout main
git merge new-feature
Fast Forward Merge
Una merge fast-forward en Git puede ocurrir cuando hay una ruta lineal desde el HEAD de la rama que se fusionará hasta el HEAD de la rama de destino. En este caso, Git no realiza una fusión real, simplemente mueve el HEAD de la rama objetivo al HEAD de la rama a fusionar.
Las dos historias se combinaron de manera efectiva, pero la historia de nuestra rama nueva fue, por así decirlo, la progresión normal de la historia de la rama principal.
Three Way Merge en Git
git branch new-feature
git add <file>
git commit -m "Fix a bug"
git checkout new-feature
git add <file>
git commit -m "Start a feature"
git add <file>
git commit -m "Finish a feature"
git checkout main
git merge new-feature
Three Way Merge
En el caso de que las ramas sean divergentes, Git debe combinar las dos historias a través de un three-way merge. En este modo, se usa un tipo de commit dedicado, el merge commit para unir las dos historias.
Los commit de merge son únicas de otros commit, ya que tienen dos commit principales. Al crear un commit de merge, Git intentará fusionar automáticamente las historias separadas. Si Git encuentra que la misma parte de un archivo ha cambiado en ambos historiales, no podrá combinarlos automáticamente. Este escenario es un conflicto de control de versiones y Git requerirá la entrada del usuario para continuar.
El nombre “three way” indica que Git necesita tres commit para descubrir cómo fusionarse: las dos commit HEAD de las dos ramas y su padre común.
Anterior
41 El comando Git check..Siguiente
43 Resolver un merge co..