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
| Palabra | Qué significa |
|---|---|
| Fusión | unir en una rama los commits de otra |
| Avance rápido | fusión que solo mueve la rama, sin commit nuevo |
| Commit de fusión | commit con dos padres que une dos ramas |
| Conflicto | dos ramas cambiaron las mismas líneas |
| Marcas de conflicto | lí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ón | Qué hace Git | Commit nuevo |
|---|---|---|
| Solo la rama tiene commits nuevos | Mueve main hacia delante | No |
| Las dos ramas cambian líneas distintas | Une los cambios solo | Sí, de fusión |
| Las dos ramas cambian la misma línea | Se detiene y pregunta | Lo haces tú |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Crea un repositorio para la carta
git init -q -b main cartaSe 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
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
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
printf 'tostada 1.50\ncafe 1.20\n' > carta/carta.txtSe 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
git -C carta add carta.txtSe 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
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
git -C carta switch -c subidaSe 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
printf 'tostada 1.50\ncafe 1.30\n' > carta/carta.txtSe 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
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
git -C carta switch mainSe 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
printf 'tostada 1.50\ncafe 1.25\n' > carta/carta.txtSe 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
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
git -C carta merge subidaSe 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ó
cat carta/carta.txtSe 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
printf 'tostada 1.50\ncafe 1.30\n' > carta/carta.txtSe 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
git -C carta add carta.txtSe 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
git -C carta commit -q --no-editSe 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.