Fusión de tres vías
Parte de la sección Control de versiones del Journey de Terminal de Coddy — lección 36 de 58.
Si ambas ramas han avanzado de forma independiente, Git no puede simplemente realizar un fast-forward. En su lugar, realiza una fusión de tres vías (three-way merge): examina el ancestro común y los extremos de las dos ramas, y genera un nuevo commit que las combina.
Este nuevo commit es el commit de fusión. Tiene dos padres, uno de cada rama:
git switch main
git merge feature -m "Merge feature"La opción -m proporciona el mensaje del commit de fusión directamente, por lo que Git no abre un editor.
La mayoría de las veces, Git puede combinar los cambios de ambas ramas automáticamente, siempre que afecten a diferentes partes de los archivos. Los conflictos solo ocurren cuando ambas ramas han cambiado las mismas líneas, que es el tema de la siguiente lección.
Desafío
IntermedioComienzas en una carpeta nueva con top.txt (contenido: a) y bottom.txt (contenido: b).
Inicializa el repositorio, realiza un primer commit y luego:
- Crea una rama llamada
featurey añade la líneaaddedatop.txt; realiza un commit. - Cambia a
mainy añade la líneaaddedabottom.txt; realiza un commit. - Fusiona
featureenmaincon el mensajeMerge feature.
Imprime el recuento de commits alcanzables desde HEAD usando git rev-list --count HEAD. El recuento esperado es 4 (initial + feature + main + merge).
Hoja de referencia
Cuando ambas ramas han divergido, Git realiza una fusión de tres vías (three-way merge), creando un nuevo commit de fusión con dos padres:
git switch main
git merge feature -m "Merge feature"La bandera -m establece el mensaje del commit de fusión sin abrir un editor. Git realiza la fusión automáticamente siempre que ambas ramas hayan cambiado líneas diferentes.
Pruébalo tú mismo
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Control de versiones
2Primeros pasos
Inicializar un repositorioLa carpeta .gitConfigurar tu identidadGit StatusResumen: Primer repositorio5Ignorar archivos
¿Por qué ignorar archivos?Patrones de .gitignoreComprobar reglas de ignoradoResumen - Repo limpio3Seguimiento de cambios
El área de preparaciónGit AddGit CommitModificar un archivo bajo seguimientoGit LogResumen - Primeros commits6Proyecto de Sitio de Recetas
Descripción General del ProyectoInicializar e Ignorar