Comandos de Git

git merge

git merge: fusiona cambios de otra rama en la rama actual.

El comando git merge se usa para integrar cambios de una rama en otra. El objetivo de una fusión es combinar el trabajo hecho en ramas distintas dentro de una sola rama, normalmente la rama principal de desarrollo.

mainf2f3f1GIT MERGE
1 / 33

La fusión es una operación habitual en los flujos de trabajo con Git, sobre todo cuando se trabaja en funcionalidades o correcciones de errores en ramas separadas. Cuando el trabajo de una rama está terminado y revisado, puede fusionarse de nuevo en la rama principal o en cualquier otra rama de destino para incorporar esos cambios.

Hay dos tipos principales de fusión en Git:

  1. Fusión fast-forward: Este tipo de fusión ocurre cuando la rama de destino no ha divergido de la rama de origen. En este caso, Git simplemente mueve el puntero de la rama de destino al último commit de la rama de origen. No se crea ningún commit de fusión porque la rama de origen ya está por delante de la rama de destino.

  2. Commit de fusión: Cuando la rama de destino ha divergido de la rama de origen, es decir, ambas ramas tienen commits nuevos, Git crea un commit nuevo que combina los cambios de las dos ramas. Esto se llama commit de fusión y tiene dos commits padre: uno de la rama de destino y otro de la rama de origen.

Las fusiones fast-forward son la mejor opción para mantener un historial de commits limpio y lineal. Curiosamente, esto suele conseguirse sin git merge, usando el comando git rebase. En lugar de crear una ensalada de commits, donde los commits de tu rama se mezclan con los commits que vienen de la otra rama, el rebase toma todos los commits de la otra rama y aplica todos tus commits encima, creando un historial lineal.

Una fusión puede acabar en un conflicto de fusión si las mismas líneas de código se han modificado en ambas ramas. En esos casos, Git marcará las líneas en conflicto en los archivos afectados y tendrás que resolver los conflictos a mano, editando los archivos y decidiendo qué cambios conservar.

Recuerda: antes de fusionar, suele ser buena práctica asegurarte de que tu rama actual está al día con los últimos cambios del repositorio remoto haciendo un git fetch seguido de un git merge o un git rebase con la rama remota. Esto puede ayudar a prevenir conflictos y mantener un historial más limpio.



Ejemplos

Fusionar la rama new-feature en la rama actual:

git merge new-feature

Fusionar la rama login-form-bugfix en la rama actual, creando un commit de fusión aunque pudiera hacerse como fusión fast-forward:

git merge --no-ff login-form-bugfix

Abortar una fusión que tiene conflictos:

git merge --abort

Después de resolver los conflictos, finalizar la fusión:

git add .
git merge --continue