Saltar al contenido principal

Tutorial de Fusión Git: Una guía completa con ejemplos

Aprende a fusionar ramas eficazmente en Git con este tutorial paso a paso. Explora diferentes estrategias de fusión, resuelve conflictos y aplica las mejores prácticas para mantener limpio tu historial Git.
Actualizado 13 mar 2025  · 15 min de lectura

Si alguna vez has trabajado en un proyecto con varios desarrolladores (o incluso simplemente has gestionado tú mismo varias funciones), sabrás que la ramificación es esencial para mantener las cosas organizadas. Pero en algún momento, todas esas ramas tienen que volver a unirse, y ahí es donde entra git merge.

En este tutorial, repasaré los distintos tipos de fusiones de Git, cómo funcionan y cómo resolver los conflictos de fusión cuando las cosas no salen según lo planeado. Por último, compartiré algunas buenas prácticas para ayudarte a utilizar git merge con eficacia y evitar los errores más comunes.

¿Qué es git merge?

En un entorno de equipo, los desarrolladores suelen trabajar en distintas funciones, correcciones de errores y mejoras en ramas separadas. Una vez finalizado su trabajo, utilizan git merge para integrar esos cambios.

Fusionar combina los cambios de una rama en otra conservando el historial completo de versiones. Unifica el historial de confirmaciones de ambas ramas.

Vamos a entender el flujo de trabajo mediante un ejemplo.

Un commit base común diverge en dos ramas, que llevan a consejos principales y de características separados antes de fusionarse. Imagen del autor.

En la imagen anterior, las ramas principal y de características han creado nuevos commits desde que se creó la rama de características.

Una rama de características y la rama principal divergen de una base común y se combinan posteriormente en una única confirmación de fusión. Imagen del autor.

La fusión de Git toma todas las confirmaciones nuevas de ambas ramas, partiendo de su base común, y las combina en una única confirmación de fusión. Después, actualiza el puntero de la cabeza para que apunte a esta nueva confirmación de fusión.

Uso básico del comando git merge

Fusionar no consiste simplemente en ejecutar git merge y dar por finalizado el proceso: hay algunos pasos clave para poner todo en orden primero. En esta sección, recorreremos todo el proceso, desde la preparación de tus ramas hasta la realización de una fusión con éxito.

Paso 1: Prepararse para una fusión

Sólo se pueden fusionar los cambios comprometidos en ambas ramas. Por tanto, utiliza el comando git status para comprobar si hay cambios no comprometidos y confírmalos utilizando el comando git commit antes de fusionarlos. 

Paso 2: Comprueba la rama de destino

Antes de ejecutar git merge, debes cambiar a la rama de destino, normalmente la rama principal. Cambia a la rama principal utilizando git checkout main o git switch main

Paso 3: Fusionar una rama

Asegúrate de que la rama principal está actualizada con el repositorio remoto. Para ello, ejecuta git pull origin main.

Ahora, ¡por fin estás listo para fusionar la rama de características con la rama principal! Puedes utilizar un comando como el siguiente

git merge feature-branch

Paso 4: Resolver conflictos de fusión (si los hay)

Git intenta resolver automáticamente los conflictos que puedan surgir durante las fusiones. Sin embargo, podría ser necesaria la intervención manual cuando no pueda resolver el conflicto por sí solo. 

Por ejemplo, si las mismas líneas de un mismo archivo se modifican en ramas distintas, pueden producirse conflictos de fusión. 

Cuando Git detecta un conflicto, detiene la fusión y te pide que lo resuelvas. En ese caso:

  • Ejecuta git status para ver qué archivos tienen conflictos. 
  • Abre esos archivos.
  • Revisa las líneas de código conflictivas y actualízalas para garantizar la coherencia en ambas ramas.

Paso 5: Confirmar la fusión

Una vez resueltos los conflictos, utiliza el comando git add . para escenificar los archivos arreglados. Después, completa la fusión enviando un mensaje: 

git merge -m “resolved conflicts”

En secciones posteriores, veremos cómo resolver los conflictos de fusión con mayor profundidad.  

Para los principiantes, aquí tienes una completa hoja de trucos de Git que cubre todos los comandos esenciales para crear, actualizar, eliminar y gestionar ramas. 

Si ya tienes algo de experiencia con Git y necesitas un repaso de los comandos importantes, consulta este tutorial para conocer los comandos Git más utilizados con ejemplos.

Aprende hoy los fundamentos de Git

Para principiantes: Control de versiones maestro mediante Git.
Empieza a aprender gratis

Tipos de fusiones en Git

Comprender los tipos de fusión de Git te ayudará a elegir la estrategia adecuada para tu escenario. He aquí los tres enfoques habituales de la fusión. 

Fusión rápida

Cuando la rama base no tiene nuevas confirmaciones desde que se creó la rama característica, Git utiliza un enfoque de avance rápido. 

Si tu nueva rama de características se actualiza mientras la rama principal permanece sin cambios, la confirmación de fusión mueve el puntero de la cabeza de la principal a la rama de características. 

No se crea ninguna confirmación de fusión adicional, lo que mantiene el historial de confirmaciones limpio y lineal.

Fusión tripartita

Si tanto la rama base como la rama de características tienen nuevas confirmaciones, Git encontrará su ancestro común y creará una nueva confirmación de fusión. Esta confirmación combina los historiales de ambas ramas, conservando el historial individual de la rama de características y de la rama principal.

En el siguiente ejemplo, "E" y "G" son nuevos commits en la rama principal después de que se creara la rama de características. 

      C---D---F (feature-branch)
     /         
A---B---E---G (main) 

Se crea una nueva confirmación de fusión, "M", que conserva el historial de las ramas principal y de características. 

       C---D---F
      /         \
 A---B---E---G---M (main)

Fusión de calabazas

Squash merge combina todos los cambios de una rama de características en una única confirmación y la fusiona en la rama de destino. No conserva el historial de confirmaciones individuales de la rama de características. 

git merge --squash feature_branch_name

Una fusión squash es especialmente útil para evitar el desorden de múltiples confirmaciones pequeñas, conservando el estado final de la función en la rama de destino.

Fusionar varias ramas

Cuando trabajes en proyectos grandes, puede que necesites fusionar varias ramas, de una en una o todas a la vez. El enfoque que elijas depende de tu flujo de trabajo y de la complejidad de los cambios. En esta sección, exploraré ambos métodos y cuándo utilizarlos eficazmente.

Fusionar más de una rama secuencialmente

Para fusionar ramas una a una, utiliza el comando fusionar secuencialmente para cada rama de característica. 

Paso 1: Cambia a la rama de destino en la que quieras fusionar los cambios.

git checkout target_branch_name

Paso 2: Fusiona la primera rama de características, como se muestra a continuación.

git merge feature_branch_1

Paso 3: Fusiona la segunda rama de características como se muestra.

git merge feature_branch_2

Repite este proceso hasta que todas las demás ramas estén fusionadas.

Fusionar más de una rama en paralelo

Sigue estos pasos para fusionar varias ramas de características a la vez.

Paso 1: Cambia a la rama de destino en la que quieras fusionar los cambios.

git checkout target_branch_name

Paso 2: Ejecuta el siguiente comando con varias ramas de características 

git merge feature_branch_1 feature_branch_2 feature_branch_3

Cuando Git fusiona varias ramas en paralelo, pueden producirse conflictos. Si eso ocurre, Git te pedirá que los resuelvas manualmente.

Manejar conflictos con fusiones múltiples

Fusionar varias ramas no siempre es sencillo, sobre todo cuando una rama depende de otra. 

Por ejemplo, fusionar feature_x en main antes de feature_y puede introducir conflictos. Del mismo modo, si distintas ramas modifican los mismos archivos, las fusiones paralelas pueden provocar conflictos que necesiten una resolución cuidadosa.

Sigue estos pasos para resolver los conflictos de fusión:

  • Paso 1: Ejecuta git status para ver qué archivos causan conflictos.
  • Paso 2: Abre los archivos conflictivos y corrígelos.
  • Paso 3: Añade los cambios al escenario y confirma.

Comprender el historial de confirmaciones de fusión 

Para conflictos complejos, puede que necesites más información de la que proporciona git status. En estos casos, puedes utilizar comandos como git log o git show para profundizar en el historial.

  • git log: muestra todo el historial de confirmaciones, incluidas las confirmaciones de fusión. Esto ayuda a identificar una fusión concreta en la que se produce el problema. 
  • git show: Si encuentras un commit merge sospechoso a partir del comando anterior, utiliza git show para inspeccionarlo. Este comando proporciona una vista detallada de la confirmación, mostrando lo que se cambió durante la fusión. También emite un identificador único para la rama padre antes de que se produzca una fusión concreta.
  • git diff: Puedes tomar los identificadores únicos de las ramas padre y fusionada de los comandos anteriores y utilizar git diff para comparar los cambios entre estos dos estados.

Fusión Git Buenas prácticas

La fusión a veces puede ser complicada, sobre todo cuando varios desarrolladores trabajan en el mismo código base. 

Aunque ya hemos hablado de cómo resolver los conflictos cuando surgen, lo mejor es prevenirlos antes de que se produzcan. En esta sección, repasaremos consejos prácticos para mantener tus fusiones fluidas y tu historial de Git limpio.

Mantén las ramas pequeñas y centradas

Las ramas grandes aumentan el riesgo de solapamiento de ediciones, lo que provoca más conflictos. Para minimizarlo, trabaja en una única característica por rama y mantén las ramas pequeñas y centradas.

Tirar y fusionar con frecuencia

Extrae los últimos cambios del repositorio remoto para mantener actualizada tu rama base antes de fusionarla. Extrae regularmente actualizaciones de la rama principal a tu rama de características para mantenerlas sincronizadas. Así se evitan grandes y complejos conflictos posteriores.

Utiliza las herramientas de fusión integradas en Git

En lugar de editar manualmente los archivos, puedes utilizar las herramientas integradas en git para resolver los conflictos en una interfaz visual. Cuando ejecutas git mergetool, se abren tres opciones:

  • LOCAL - Versión de la rama principal. Si eliges esta opción, se mantiene el contenido del archivo en conflicto de la rama principal y se ignoran los cambios de la rama de características. 
  • REMOTO - La versión de la rama de características. Al seleccionar esta opción, se aplica el contenido de la rama de características al archivo en conflicto.
  • BASE - Esto combinará los cambios de ambas ramas de archivos en conflicto y los fusionará. 

Fusionar en orden

Al fusionar varias ramas, el orden es importante, sobre todo si una función depende de otra. Si feature_x depende de feature_y, fusionar primero feature_x puede introducir conflictos. Para evitarlo, fusiona siempre las ramas en el orden de sus dependencias para mantener el proceso fluido y minimizar los conflictos.

Fusión de calabazas 

Como ya hemos dicho, la fusión de squash consolida todos los commits de una rama de características en un único commit, manteniendo limpio el historial de commits y reduciendo los posibles conflictos de fusión.

Un enfoque alternativo es el rebase, que aplica los cambios de la rama de características directamente sobre la rama base. Esto crea un historial lineal y evita confirmaciones de fusión innecesarias. Sin embargo, ambos métodos reescriben el historial y no conservan los commits individuales de la rama de características.

Conclusión

En este tutorial de fusión de Git, hemos cubierto todo, desde los aspectos básicos de la fusión hasta las mejores prácticas para evitar conflictos. Entender cómo utilizar git merge eficazmente ayuda a los equipos a colaborar sin problemas, manteniendo los flujos de trabajo fluidos y el historial de código limpio.

Si quieres profundizar en tus conocimientos de Git, ¡consultaeste curso de Git intermedio para dominarflujos de trabajo y técnicas más avanzadas!

Aprende hoy los fundamentos de Git

Para principiantes: Control de versiones maestro mediante Git.

Preguntas frecuentes

¿Cuál es la diferencia entre git merge y git rebase?

Mientras que ambos comandos integran los cambios de una rama en otra, git merge crea una nueva confirmación de fusión, preservando el historial de ambas ramas. En cambio, git rebase aplica las confirmaciones de la rama de características directamente a la rama de destino, lo que da como resultado un historial de confirmaciones lineal, pero reescribiendo el historial en el proceso.

¿Puedo deshacer una fusión en Git?

Sí, si aún no has empujado la fusión, puedes utilizar:

git reset --hard HEAD~1

Esto restablece tu rama al estado anterior a la fusión. Si la fusión ya ha sido empujada, tendrás que utilizar git revert para deshacer los cambios de forma segura manteniendo intacto el historial.

¿Cómo fusiono una rama remota en mi rama local?

Para fusionar una rama remota en tu rama local, sigue estos pasos:

git fetch origin  

git checkout my-branch  

git merge origin/feature-branch 

Así te aseguras de que estás fusionando las últimas actualizaciones del repositorio remoto.

¿Cómo puedo evitar conflictos de fusión innecesarios?

Para minimizar los conflictos:

  • Extrae regularmente los últimos cambios antes de empezar un nuevo trabajo (git pull).
  • Fusiona por orden de dependencia si varias ramas dependen entre sí.
  • Utiliza banderas de características para integrar código progresivamente en lugar de ramas de larga duración.

¿Qué ocurre cuando fusiono una rama que ya estaba fusionada?

Si una rama ya se ha fusionado, volver a ejecutar git merge feature-branch no cambiará nada. Git reconocerá que las ramas comparten una historia común y simplemente confirmará que todo está actualizado.

¿Puedo fusionar varias ramas a la vez?

No, Git no permite fusionar varias ramas en un solo comando. Tienes que fusionarlos secuencialmente:

git merge feature-branch-1  

git merge feature-branch-2  

Si es necesario, puedes crear una rama de integración en la que fusiones varias ramas y luego fusionarla en main.

¿Debo usar git merge --no-ff o git merge --ff?

  • --no-ff (sin fusión rápida) crea una nueva confirmación de fusión, lo que facilita el seguimiento del historial de la rama.
  • --ff (fusión rápida) aplica los cambios directamente si es posible, evitando confirmaciones extra.

Para proyectos en los que el seguimiento de las ramas de características es importante, se recomienda --no-ff.


Srujana Maddula's photo
Author
Srujana Maddula
LinkedIn

Srujana es una redactora técnica autónoma con una licenciatura de cuatro años en Informática. Escribir sobre diversos temas, como la ciencia de datos, la computación en la nube, el desarrollo, la programación, la seguridad y muchos otros, le resulta natural. Le encanta la literatura clásica y explorar nuevos destinos.

Temas

Aprende más sobre Git con estos cursos

Curso

Foundations of Git

4 hr
46.1K
Familiarize yourself with Git for version control. Explore how to track, compare, modify, and revert files, as well as collaborate with colleagues using Git.
Ver detallesRight Arrow
Comienza el curso
Ver másRight Arrow
Relacionado

Tutorial

Tutorial de GIT Push y Pull

Aprende a realizar solicitudes de Git PUSH y PULL con GitHub Desktop y la línea de comandos.

Olivia Smith

13 min

Tutorial

Tutorial de Git Revert y Git Reset para principiantes

Una guía tutorial para principiantes que muestra cómo utilizar los comandos Git Revert y Reset.
Zoumana Keita 's photo

Zoumana Keita

10 min

Tutorial

Tutorial de GitHub y Git para principiantes

Un tutorial para principiantes que muestra cómo funciona el control de versiones Git y por qué es crucial para los proyectos de ciencia de datos.
Abid Ali Awan's photo

Abid Ali Awan

9 min

Tutorial

Git rename branch: Cómo cambiar el nombre de una rama local o remota

Aprende a renombrar ramas Git locales y remotas utilizando el terminal o la interfaz gráfica de usuario (GUI) de clientes populares como GitHub.

Tutorial

Git pull force: Cómo sobrescribir una rama local con una remota

Aprende por qué git pull --force no es la mejor forma de sobrescribir una rama local con la versión remota, y descubre el método adecuado utilizando git fetch y git reset.

Tutorial

Git Prune: Qué es la poda Git y cómo usarla

La poda Git es un comando Git que elimina del repositorio los objetos que ya no son accesibles desde ninguna confirmación o rama, ayudando a liberar espacio en disco.
Ver másVer más