Git Merge con y sin Fast Forward
Tags: beginners, git
Published: 2021-02-17 09:58:04

 En este post hablaremos sobre dos diferentes formas de fusionar nuestras ramas en un repositorio de git.

Es muy importante recordar que a la hora de hacer un merge, podemos hacerlo de dos formas, **QUE NO CAMBIARAN EL RESULTADO FINAL**, solo se vera afectada la forma en la que veremos la historia de dichas ramas.

Por un lado podemos hacer un simple merge, con el comando `git merge <branch>`,  que lo que hará será fusionar ambas ramas y traernos todos los cambios de la rama que indiquemos en el comando a la rama en la que nos encontremos actualmente.

Veamos un ejemplo, tenemos el siguiente repositorio, el cual cuenta con dos ramas, master y develop.

![Captura de pantalla 2021-02-17 a las 10.09.51](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/uu07qx6y5u4cnpyibkx6.png)
 
Como podemos ver, en **master** contamos con el commit inicial y en la rama **develop** tenemos dos commits(además del commit inicial del que parten ambas ramas):

- Commits en master:
![Captura de pantalla 2021-02-17 a las 10.15.29](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3q2nhoohwz6x285xwz69.png)
 

- Commits en develop:
![Captura de pantalla 2021-02-17 a las 10.13.52](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ege3ui0bwu8rwdnztmln.png)

 
Ahora lo que haremos será, desde la rama **master** hacer uso del comando previamente mencionado, para integrar los cambios que tenemos en **develop**. En la siguiente captura podemos ver el resultado satisfactorio de la ejecución del `merge`.

![Captura de pantalla 2021-02-17 a las 10.19.05](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3b1469m8qc0gz53m78u4.png)

Para ver esto de una forma mucho más clara podemos hacer uso de `git log --graph`, que nos mostrara el log de una forma mas gráfica. Podemos apreciar que ya tenemos los commits que hicimos en develop integrados en master, pero sin respetar la historia de la rama develop.

![Captura de pantalla 2021-02-17 a las 10.20.52](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4zlxxqeebz1h0sumoslj.png)
 

Ahora para que quede la diferencia aún de una forma mas clara, repetiremos el merge de nuestras ramas, pero en este caso añadiremos la opción --no-ff, quedando el comando de la siguiente manera `git merge --no-ff <branch>`. También podemos añadir un mensaje de commit en el comando.

![Captura de pantalla 2021-02-17 a las 10.42.13](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bockeo0hhu3ybugrvnol.png)

Ahora volveremos a hacer uso de `git log --graph` para ver el resultado de nuestro merge **sin fast forward**. Podemos ver de forma mas clara el resultado, ahora tambien tenemos integrados los cambios de develop en master, pero con la diferencia de que la visualización de **develop** queda separada de master.

![Captura de pantalla 2021-02-17 a las 10.43.30](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/f2um2r5jx3eh6h9evggq.png)
 
Para finalizar, volveremos a insistir en el hecho de que en **ningún caso**, ni haciendo `git merge <branch>` ni con la opción `--no-ff` se verá afectado nuestro código, solo cambiara la forma en la que visualizaremos el histórico de nuestro repositorio.