Cómo comprobar si una rama de Git se ha fusionado completamente en la rama principal (main)

GitGitBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este laboratorio, aprenderás cómo comprobar de manera efectiva si una rama (branch) de Git se ha fusionado completamente en otra rama, centrándote específicamente en la rama main. Esta es una habilidad crucial para mantener un repositorio de Git limpio y organizado.

Comenzarás utilizando el comando git branch --merged main para identificar las ramas que se han integrado completamente en main. A continuación, verificarás los resultados utilizando el comando git log main ^branch para confirmar que todos los commits de la rama objetivo están presentes en main. Finalmente, probarás estos métodos con una rama parcialmente fusionada para entender los diferentes resultados.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL git(("Git")) -.-> git/BranchManagementGroup(["Branch Management"]) git/BranchManagementGroup -.-> git/branch("Handle Branches") git/BranchManagementGroup -.-> git/checkout("Switch Branches") git/BranchManagementGroup -.-> git/merge("Merge Histories") git/BranchManagementGroup -.-> git/log("Show Commits") git/BranchManagementGroup -.-> git/cherry_pick("Cherry Pick") subgraph Lab Skills git/branch -.-> lab-560045{{"Cómo comprobar si una rama de Git se ha fusionado completamente en la rama principal (main)"}} git/checkout -.-> lab-560045{{"Cómo comprobar si una rama de Git se ha fusionado completamente en la rama principal (main)"}} git/merge -.-> lab-560045{{"Cómo comprobar si una rama de Git se ha fusionado completamente en la rama principal (main)"}} git/log -.-> lab-560045{{"Cómo comprobar si una rama de Git se ha fusionado completamente en la rama principal (main)"}} git/cherry_pick -.-> lab-560045{{"Cómo comprobar si una rama de Git se ha fusionado completamente en la rama principal (main)"}} end

Usar git branch --merged main

En este paso, aprenderemos cómo usar el comando git branch --merged para ver qué ramas (branches) se han integrado completamente en otra rama. Este es un comando muy útil para mantener tu repositorio limpio y organizado.

Primero, asegúrate de estar en el directorio de tu proyecto. Abre tu terminal y navega hasta el directorio my-time-machine:

cd ~/project/my-time-machine

Ahora, creemos una nueva rama llamada feature-branch y cambiemos a ella. Simularemos realizar algunos cambios en esta rama.

git branch feature-branch
git checkout feature-branch
echo "Adding a new feature" >> feature.txt
git add feature.txt
git commit -m "Add new feature"

Después del commit, deberías ver una salida similar a esta:

[feature-branch a1b2c3d] Add new feature
 1 file changed, 1 insertion(+)
 create mode 100644 feature.txt

Ahora, cambiemos de nuevo a la rama master y fusionemos la rama feature-branch en ella.

git checkout master
git merge feature-branch

Deberías ver una salida que indique una fusión exitosa:

Updating e1f2g3h..a1b2c3d
Fast-forward
 feature.txt | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 feature.txt

Ahora que hemos fusionado feature-branch en master, usemos git branch --merged para ver qué ramas se han fusionado completamente en master.

git branch --merged master

Este comando listará todas las ramas cuyos commits se hayan incorporado en la rama master. Deberías ver tanto master como feature-branch en la lista, lo que indica que feature-branch se ha fusionado completamente en master.

Comprender qué ramas se han fusionado es importante porque te ayuda a identificar las ramas que se pueden eliminar de forma segura, manteniendo tu repositorio ordenado. Es como saber qué misiones secundarias en un juego has completado y que ahora puedes ignorar.

Verificar con git log main ^branch

En el paso anterior, usamos git branch --merged para ver qué ramas (branches) se habían fusionado en master. Ahora, usemos un comando diferente, git log, para verificar esto desde otra perspectiva. El comando git log con la sintaxis main ^branch es una forma poderosa de ver los commits que están en main pero no en branch.

Primero, asegúrate de estar en el directorio my-time-machine:

cd ~/project/my-time-machine

Ahora, usemos git log para ver los commits que están en master pero no en feature-branch.

git log master ^feature-branch

Dado que fusionamos completamente feature-branch en master en el paso anterior, todos los commits de feature-branch ahora también están en master. Por lo tanto, este comando debería mostrarte los commits que originalmente solo estaban en la rama master antes de la fusión. No debería mostrar el commit "Add new feature" que hicimos en feature-branch.

Deberías ver una salida similar a esta, mostrando solo el/los commit(s) inicial(es) de la rama master:

commit e1f2g3h4i5j6k7l8m9n0o1p2q3r4s5t6u7v8w9x (HEAD -> master)
Author: Jane Doe <[email protected]>
Date:   Mon Aug 7 10:00:00 2023 +0000

    Send a message to the future

Si feature-branch no estuviera completamente fusionada, este comando mostraría los commits que están en master pero no en feature-branch, así como cualquier commit que esté en feature-branch pero no en master. El hecho de que el commit "Add new feature" no se muestre aquí confirma que ahora está presente en master.

Esta sintaxis git log main ^branch es una excelente manera de confirmar visualmente si todos los commits de una rama están presentes en otra. Te ayuda a entender la relación entre diferentes ramas en tu repositorio.

Probar con una rama parcialmente fusionada

En los pasos anteriores, vimos cómo funcionan git branch --merged y git log main ^branch con una rama completamente fusionada. Ahora, veamos qué sucede con una rama que está parcialmente fusionada, es decir, algunos, pero no todos, de sus commits se han integrado en otra rama.

Primero, asegúrate de estar en el directorio my-time-machine:

cd ~/project/my-time-machine

Creemos una nueva rama llamada partial-feature y cambiemos a ella:

git branch partial-feature
git checkout partial-feature

Ahora, haremos dos commits en esta nueva rama:

echo "Adding part 1 of the feature" >> partial.txt
git add partial.txt
git commit -m "Add part 1"
echo "Adding part 2 of the feature" >> partial.txt
git add partial.txt
git commit -m "Add part 2"

Después de los commits, deberías ver una salida similar a esta:

[partial-feature a1b2c3d] Add part 1
 1 file changed, 1 insertion(+)
 create mode 100644 partial.txt
[partial-feature e1f2g3h] Add part 2
 1 file changed, 1 insertion(+)

Ahora, cambiemos de nuevo a la rama master y fusionemos solo el primer commit de partial-feature. Podemos hacer esto usando git cherry-pick. Primero, necesitamos el hash del commit de "Add part 1". Puedes encontrar esto ejecutando git log partial-feature y copiando el hash del primer commit.

git checkout master
## Reemplaza <commit_hash> con el hash real del commit "Add part 1"
git cherry-pick <commit_hash>

Deberías ver una salida que indique que el cherry-pick fue exitoso:

[master i1j2k3l] Add part 1
 Date: Mon Aug 7 10:05:00 2023 +0000
 1 file changed, 1 insertion(+)
 create mode 100644 partial.txt

Ahora, usemos de nuevo git branch --merged master:

git branch --merged master

Deberías ver master y feature-branch en la lista, pero no partial-feature. Esto se debe a que partial-feature todavía tiene el commit "Add part 2" que no se ha fusionado en master. git branch --merged solo lista las ramas donde todos los commits están presentes en la rama de destino.

Finalmente, usemos git log master ^partial-feature:

git log master ^partial-feature

Este comando mostrará los commits que están en master pero no en partial-feature. Debería mostrar el/los commit(s) inicial(es) de master, el commit "Add new feature" (que ahora está en master) y el commit "Add part 1" (que hicimos cherry-pick). No debería mostrar el commit "Add part 2", ya que ese commit solo está en partial-feature.

Esto demuestra cómo git branch --merged y git log main ^branch pueden ayudarte a entender el estado de fusión de tus ramas, incluso cuando solo se han integrado algunos commits.

Resumen

En este laboratorio (lab), aprendimos cómo comprobar si una rama (branch) de Git se ha fusionado completamente en otra rama, específicamente main (o master). Comenzamos utilizando el comando git branch --merged main, que enumera todas las ramas cuyos commits se han incorporado completamente en la rama main. Esta es una forma rápida de identificar las ramas que están listas para ser limpiadas.

Luego exploramos un método de verificación más detallado utilizando git log main ^branch. Este comando muestra los commits que están en main pero no en la rama especificada. Si este comando no devuelve ninguna salida, confirma que todos los commits de la rama están presentes en main, verificando así la fusión completa. Finalmente, probamos estos métodos con una rama parcialmente fusionada para entender la diferencia en la salida y consolidar aún más nuestra comprensión de cómo determinar con precisión el estado de fusión de una rama.