Resumen
Hasta ahora hemos aprendido a usar el git para:
-
Llevar registro local de cambios de un conjunto de archivos (con
commit), que nos permite tener diferentes versiones de un archivo organizadas. -
Tener diferentes líneas de desarrollo (con lo que hemos visto de
ramas), para poder trabajar en diferentes versiones del código con tranquilidad. -
Tener un backup en línea usando push y el servicio sourcehut.
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.

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:

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.