Skip to content

Cuando el Merge falla

Updated: at 12:00 AM

Resumen

Hasta ahora hemos aprendido a usar el git para:

Ahora vamos a aprender a colaborar, utilizando el servicio de sourcehut.

Merging

Volvamos a revisar que pasa realmente cuando estamos haciendo una mezcla. Supongamos, siguiendo el ejemplo del libro de git https://git-scm.com/book/en/v2/Git-Branching-Basic-Branching-and-Merging, que tenemos un repositorio con dos ramas. Está la rama master, que tiene la versión más estable del proyecto; y por otro lado está la rama iss53, donde estamos trabajando en algo importante pero no urgente.

Tres estados


Supongamos que ya terminamos la versión en C5. Queremos, entonces, hacer un merge, es decir mezclar los cambios de C5 con C4. Nos paramos en C4 y pedimos al sistema que mezcle las ramas master y iss53. Ahora, aquí tenemos tres commits involucrados. C4, que es la versión estable en master; C5, que es la versión estable en iss53; y finalmente C2, que es el antecesor común a ambas versiones.

Es decir, una mezcla siempre involucra tres commits.

Ahora, como habíamos dicho antes, la mayoría de las veces esto no importa mucho. Si lo que hemos modificado en C4 es un archivo diferente al de C5, o si es el mismo archivo pero son secciones diferentes, no habrá mucho problema. Lo complejo surge si se trata de la misma línea.


Pongamos un ejemplo. Digamos que estamos tecleando un poema, y en la versión C2 vamos en lo siguiente:

Puedo escribir los versos mas tristes esta noche.
Escribir por ejemplo

En la versión C3 Continuamos:

Puedo escribir los versos mas tristes esta noche.
Escribir por ejemplo : 'La noche está estrellada,

y en C5:

Puedo escribir los versos mas tristes esta noche.
Escribir por ejemplo : 'La noche está estrellada,
y tiritan, azules, los astros, a lo lejos'.

Ahora, una amiga que revisa el texto en la versión C2 se da cuenta que falta una coma, entonces produce la versión C4, después de la C2:

Puedo escribir los versos mas tristes esta noche.
Escribir, por ejemplo

Si queremos hacer un merge tenemos tres versiones diferentes de la segunda línea del poema.

Tenemos la línea de C2:

Escribir por ejemplo

la línea de C4:

Escribir, por ejemplo

y la línea de C5:

Escribir por ejemplo : 'La noche está estrellada,

Como tenemos tres versiones diferentes de la misma línea, el sistema no puede automáticamente determinar cuál es la forma de proceder. Entonces tenemos que entrar a decidir.


Auto-merging poema
CONFLICT (content): Merge conflict in poema
Automatic merge failed; fix conflicts and then commit the result.

Por ejemplo en este caso emacs muestra:

emacs merge

Aquí HEAD es donde tenemos el puntero actualmente y la segunda es la versión master. Podemos elegir dejar una, otra, o una nueva que incluya cambios de ambas. Lo que queremos realmente es:


Puedo escribir los versos mas tristes esta noche.
Escribir, por ejemplo: 'La noche está estrellada,
y tiritan, azules, los astros, a lo lejos'.

Después de guardar el cambio podemos hacer un commit y con esto terminamos la mezcla.


Previous Post
Cátedra Nacional Esapista:Automatización e "ia", una visión crítica.
Next Post
Comandos y flujo GIT