git merge
git merge: fusiona cambios de otra rama en la rama actual.
El comando git merge integra en una rama los cambios de otra. Así reúne en una sola rama el trabajo hecho por separado, normalmente en la rama principal de desarrollo.
La fusión es habitual en los flujos de trabajo con Git, sobre todo cuando las funcionalidades o correcciones se desarrollan en ramas separadas. Una vez terminado y revisado el trabajo de una rama, puedes integrarlo en la principal o en cualquier otra rama de destino.
Hay dos tipos principales de fusión en Git:
-
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 merge porque la rama de origen ya está por delante de la rama de destino.
-
Commit de merge: 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 merge 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.
Un merge puede acabar en un conflicto 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 hacer un merge, 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. Así reduces los conflictos y mantienes un historial más limpio.
Ejemplos
Hacer un merge de la rama new-feature en la rama actual:
git merge new-featureHacer un merge de la rama login-form-bugfix en la rama actual, creando un commit de merge aunque pudiera hacerse como fusión fast-forward:
git merge --no-ff login-form-bugfixAbortar un merge que tiene conflictos:
git merge --abortDespués de resolver los conflictos, finalizar el merge:
git add .git merge --continue
.gitignoregit checkoutgit configgit taggit worktree