¿Te resulta más fácil leer con fondo crema, un tono de color, más contraste o un texto más grande? Elige tus colores y tu texto una sola vez, para todas las páginas.

Lección gratuita

Fusionar ramas y resolver conflictos en Git

Después de esta lección: Puedo fusionar dos ramas y resolver un conflicto.

Lección de 60 min17 comandosLaboratorio de Git y Gitea: aprende clone, commit y push en un servidor Git propio

Una fusión une el trabajo de dos ramas

Fusionar en Git (merge) es traer a una rama los commits de otra. Es el paso que une el trabajo de varias personas en una sola versión.

Dos empleadas de una cafetería cambian el precio del café el mismo día, cada una en su rama. Git une lo que puede y te avisa cuando no sabe cuál elegir.

Al terminar esta lección

Nota

Puedo fusionar dos ramas y resolver un conflicto.

Palabras clave

PalabraQué significa
Fusiónunir en una rama los commits de otra
Avance rápidofusión que solo mueve la rama, sin commit nuevo
Commit de fusióncommit con dos padres que une dos ramas
Conflictodos ramas cambiaron las mismas líneas
Marcas de conflictolíneas que Git escribe para separar las dos versiones

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Hay dos formas de fusionar

Si main no ha cambiado desde que creaste tu rama, Git solo mueve main hacia delante. Es un avance rápido. No hay commit nuevo.

Si las dos ramas tienen commits propios, Git crea un commit de fusión. Tiene dos padres, uno por cada rama que une.

Si además cambiaron las mismas líneas, hay un conflicto, y decides tú.

Qué pasa en cada caso

SituaciónQué hace GitCommit nuevo
Solo la rama tiene commits nuevosMueve main hacia delanteNo
Las dos ramas cambian líneas distintasUne los cambios soloSí, de fusión
Las dos ramas cambian la misma líneaSe detiene y preguntaLo haces tú

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Crea un repositorio para la carta

Comando
git init -q -b main carta

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Fija tu nombre de autor

Comando
git -C carta config user.name "Estudiante"

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Fija tu correo de autor

Comando
git -C carta config user.email "[email protected]"

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Escribe la carta de partida

Comando
printf 'tostada 1.50\ncafe 1.20\n' > carta/carta.txt

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Prepara el archivo

Comando
git -C carta add carta.txt

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Guarda el commit de partida

Comando
git -C carta commit -q -m "Crear la carta"

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Vas a provocar un conflicto a propósito

Una rama sube el café a 1.30. La rama principal lo baja a 1.25. Las dos cambian la misma línea desde el mismo commit de partida.

Primero haces el cambio en la rama subida. Después vuelves a main y haces el otro.

Crea la rama subida y entra

Comando
git -C carta switch -c subida

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Sube el café a 1.30

Comando
printf 'tostada 1.50\ncafe 1.30\n' > carta/carta.txt

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Guarda el cambio en subida

Comando
git -C carta commit -q -am "Subir el cafe a 1,30"

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Vuelve a main

Comando
git -C carta switch main

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Baja el café a 1.25

Comando
printf 'tostada 1.50\ncafe 1.25\n' > carta/carta.txt

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Guarda el cambio en main

Comando
git -C carta commit -q -am "Bajar el cafe a 1,25"

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Intenta fusionar subida en main

Comando
git -C carta merge subida

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Lee lo que Git escribió

Comando
cat carta/carta.txt

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Tres líneas marcan las dos versiones

Git dejó el archivo a medias. Entre <<<<<<< HEAD y ======= está la versión de la rama en que estás. Entre ======= y >>>>>>> subida está la de la otra rama.

Para resolverlo, edita el archivo hasta dejar el texto final y borra las tres líneas de marca. Después haz git add y git commit. El comando git status --short muestra UU junto al archivo en conflicto.

Deja el precio final: 1.30

Comando
printf 'tostada 1.50\ncafe 1.30\n' > carta/carta.txt

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Marca el conflicto como resuelto

Comando
git -C carta add carta.txt

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Termina la fusión

Comando
git -C carta commit -q --no-edit

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Un error frecuente

Advertencia

Mucha gente cree que un conflicto significa que el repositorio está roto. No es así: significa que dos personas cambiaron las mismas líneas y Git no puede elegir. No se pierde nada. Una persona decide el texto final.

Sobre este laboratorio y su código: Laboratorio de Git y Gitea: aprende clone, commit y push en un servidor Git propio

¿Enseñas a una clase? Asigna este módulo a tus alumnos con guía del profesor, tareas con corrección automática y un laboratorio para cada alumno.