Joaquin Martinez

Depura tus errores y construye la mejor versión de ti, cada línea cuenta.

Aprende git: Fusión de ramas con el método Fast-Forward

20-01-2025
Git y GitHub
Git
Cover Post

Git Merge Fast-Forward: Viaja en el Tiempo y Fusiona Ramas

Descubre el escenario de Git Merge Fast-Forward, una de las formas más comunes de fusionar cambios en un repositorio. Este post te guiará paso a paso para simular este escenario, desde la creación de una nueva rama hasta la fusión final con la rama principal. Aprenderás cómo los commits y el historial de tu proyecto se ven afectados en este proceso, manteniendo tu trabajo organizado y tu repositorio actualizado.

Preparación del entorno

Para este tutorial práctico, utilizaremos una carpeta con archivos de ejemplo para familiarizarnos con el concepto de ramas en Git.

Puedes descargar el proyecto en este enlace:
Descargar Proyecto

Una vez descargado el archivo .zip, descomprímelo y accede a él a través de tu terminal de Git (como git bash) utilizando el comando cd [ruta de la carpeta].

Una vez que tengas el repositorio abierto en git bash, podemos continuar con las prácticas de Git.

Historial de Commits y Creación de Ramas

Ahora que estamos dentro del proyecto, podemos visualizar el historial de commits que se han creado usando el alias git lg.

alt text

Abriremos también nuestro repositorio en VSCode y simularemos el escenario de “Git Merge Fast-Forward”. Para empezar, crearemos un nuevo archivo llamado villanos.md y le agregaremos el siguiente contenido:

alt text

Trabajando en la Nueva Rama

Ahora que tenemos estos nuevos cambios en nuestro repositorio, podemos simular que se trata de una nueva funcionalidad que aún no queremos integrar en la rama master. Para ello, es necesario crear una nueva rama utilizando el comando:

git branch [nombre de la nueva rama]

alt text

Podemos verificar cuántas ramas existen en nuestro repositorio con el comando git branch. La rama actual se indicará en color verde. Como necesitamos movernos a la nueva rama, usaremos el comando:

git checkout [nombre de la rama].

alt text

Una vez que viajamos a la nueva rama, podemos verificar el estado de los commits con git lg. Observamos que tanto la rama master como la nueva rama villanos apuntan al mismo commit.

Ahora, crearemos el commit del nuevo archivo villanos.md que hemos creado.

alt text

Cuando ejecutamos git log de nuevo, podemos observar que las ramas apuntan a diferentes commits. Esto confirma que estamos trabajando en la nueva rama.

alt text

Añadiremos una nueva modificación en el archivo villanos.md y volveremos a hacer un commit.

alt text

alt text

Al ejecutar git lg nuevamente, notamos que nuestra rama master se ha quedado dos commits atrás. Esto corrobora por segunda vez que seguimos trabajando dentro de la rama de desarrollo.

alt text

Si en este punto cambiamos de la rama villanos a la rama master con git checkout master, ocurrirá algo interesante:

alt text

alt text

El nuevo archivo villanos.md que habíamos agregado es eliminado y el editor nos marca en rojo que no existe en la rama master. Este es el comportamiento esperado, ya que la rama master no tiene conocimiento de los cambios que se han realizado en la rama villanos.

Entendiendo el Escenario Git Fast-Forward

El Git Merge Fast-Forward ocurre cuando la rama que recibirá los cambios (en este caso, master) no ha tenido nuevos commits desde que se creó la rama que se fusionará (en este caso, villanos). Git simplemente mueve el puntero de la rama master hacia adelante para que apunte al último commit de la rama villanos. Este proceso es rápido y no crea un nuevo commit de fusión.

Para ejecutar la fusión, debemos estar posicionados en la rama que recibirá los cambios. Si queremos fusionar la rama villanos en la rama master, primero debemos asegurarnos de estar en la rama master.

Ejecutando la Fusión (Merge)

Ahora es momento de implementar los cambios de la rama villanos a la rama master con el comando:

git merge villanos-rama

alt text

Como se puede observar, el merge se ha realizado correctamente y el resultado es un Fast-Forward. Si ejecutamos git lg nuevamente, veremos lo siguiente:

alt text

Las dos ramas que hemos creado ahora apuntan al mismo commit y el archivo villanos.md ya no se muestra como eliminado.

Limpieza de Ramas

Una vez que la nueva rama ha sido fusionada, ya no cumple una función dentro del repositorio. Lo habitual es eliminar las ramas que ya no se utilizan para mantener el repositorio limpio. Esto se logra con el comando:

git branch -d [nombre de la rama]

alt text

Ampliando el Concepto de Merge en Git

Aunque el Fast-Forward merge es sencillo y muy común, Git también maneja otros escenarios de fusión. Es importante entender cuándo ocurre un Fast-Forward y cuándo se requiere un merge de tres vías (Three-way merge).

El Three-way merge se da cuando la rama principal tiene commits nuevos que no existen en la rama que se va a fusionar. En este caso, Git no puede simplemente mover el puntero. En su lugar, crea un nuevo commit de fusión (merge commit) que tiene dos padres: el último commit de la rama principal y el último commit de la rama que se fusiona. Este commit de fusión registra los cambios combinados de ambas ramas, manteniendo un historial más claro del proceso.

Este tipo de merge es muy útil en escenarios de colaboración, ya que permite documentar explícitamente la integración de una funcionalidad desarrollada en una rama separada.

El conocimiento de estos diferentes tipos de fusiones te dará más control sobre el historial de tu repositorio y te ayudará a trabajar de manera más eficiente, especialmente en equipos de desarrollo.

Post Siguiente

Unión de ramas en Git: El escenario de la unión automática

Post Anterior

Flujo de trabajo con git: ramas, commits y escenarios de merge explicados