Merges
El primer conflicto
El anterior comando trae el branch mencionado (lisa) y lo combina con el que se está seleccionado (master, en este caso). En nuestro ejemplo el archivo recipes/apple_pie.txt tiene el contenido diferente en ambos branch, por lo tanto git nos muestra un mensaje como:
El mensaje nos indica que se encontró un conflicto en el archivo recipes/apple_pie.txt, que el merge automático falló y que debemos ajustar las diferencias y luego hacer un nuevo commit.
Si abrimos el archivo que tiene el conflicto git lo ha modificado para que nosotros identifiquemos las diferencias y ajustemos el contenido definitivo:
Ajustando manualmente:
Tendríamos que adicionar los cambios a staging y luego commit:
git ya entiende que estamos resolviendo un conflicto de un merge y arma un mensaje preestablecido que describe el merge:
podemos consultar el nuevo commit (es es el commit de un merge)
El merge es solo un commit con la diferencia que tiene dos campos parent, es decir como parents tiene los últimos commit de cada rama que estuvieron en el merge, por supuesto que puede tener tantos parent como ramas que haya hecho merge.
Por otro lado la rama lisa, aun conserva su versión de "recetas", si se quiere actualizar se realiza un merge pero a diferencia del anterior este no requiere un commit:
Nótese el mensaje de avance rápido: fast forward.
Este comando no genera conflictos puesto que git sabe que ya fueron solucionados en el commit anterior, lo que hace git es simplemente pasar el apuntador de el branch lisa al último commit:
Perdiendo la cabeza
Ademas de poder movernos entre ramas con el comando
también git permite moverse entre commits, por ejemplo:
git nos advierte que estamos en modo: You are in 'detached HEAD' state. Y si consultamos el branch actual:
entonces hemos "perdido la cabeza".
Para que es util perder la cabeza?
Si realizamos un cambio en recipes/apple_pie.txt y le hacemos un nuevo commit commit podremos ver que el HEAD se mantiene con este último commit:
y si realizamos otro commit adicional:
retornando a el branch master:
hasta acá todo normal, excepto que los commit que se hicieron detached (sin branch) de alguna manera se hacen inalcanzables a menos que tomemos atenta nota del hash para volver a ellos si se requiere, puesto que estos commit están sin ninguna rama.
Sin embargo con el paso del tiempo es posible que git corra su garbage collector y estos commit se hallan eliminado, git actúa un poco como algunos lenguajes de programación e identifica lo que esta consumiendo espacio en disco (no necesario) y lo elimina.
Estando a tiempo de salvar los commit , primero debemos ir hacia el commit:
y desde allí creamos una nuevo branch:
ya solo tendríamos que volver a master y hacer merge del nuevo branch si es lo que se desea.
Muy útil si queremos experimentar con algo y decidir si realmente lo queremos vincular con una rama principal, no olvidar poner un branch antes de hacer merge.
Last updated
Was this helpful?