Branches
Last updated
Was this helpful?
Last updated
Was this helpful?
Git es especial cuando se trata de trabajar con ramas, cuando creamos el primer commit, git se encarga de crear la rama por defecto "Master", lo podemos comprobar con el comando para visualizar branches:
Dentro de la carpeta refs>heads se encuentra el archivo de la rama principal master.
Probablemente pensarÃa que es un archivo comprimido como los blobs anteriores, pero este no esta comprimido por lo que lo puedo consultar de la manera tradicional (sin git):
resultado:
solo contiene una sola lÃnea con el hash y como se puede imaginar solo es una referencia sobre el el último commit que a su vez esta referenciado con el commit anterior:
Se crean nuevas ramas para separar los contenidos de los archivos que queremos diferenciar del principal, por ejemplo queremos tener recetas de una amiga "Lisa" separadas de las nuestras
Ahora si consultamos el contenido de ambos archivos "brannches" master y lisa:
vemos que tienen exactamente el mismo hash, es decir:
dos branch apuntando al mismo commit, si consultamos las ramas:
El * nos indica el branch actual, pero sonde se almacena esta información, es decir como sabe que master es actualmente el branch seleccionado? Para ello git debió crear un archivo HEAD, lo podemos consultar a ver que contiene (no esta comprimido por git, se consulta de la forma cotidiana):
el contenido esta referenciando a un archivo, master en este caso, dentro de la carpeta refs/heads lo que quiere decir que HEAD esta apuntando a master que a su vez esta apuntando a un último commit:
Para agregar los ingredientes se adicionan una lineas de texto en el archivo Recipes/apple_pie.txt y posteriormente lo que ya sabemos, git add, git commit. Después de esto la rama master avanza a un nuevo commit llevandose con sigo el objeto HEAD y la rama lisa sigue igual:
La rama actual es master,.
Dos cosas principalmente:
1, El contenido del archivo HEAD que es una referencia a los branches cambia ahora
Larama actual de trabajo es ahora lisa
Git se encarga de cambiar los archivos en los que trabajamos, los cambia por los que apunta el commit donde esta el branch lisa (en este caso el commit que inicia 5720), si revisamos el commit de lisa:
notamos que no esta el texto con los ingredientes que se adicionaron en la rama master, es decir es otra versión de nuestro archivo, en este caso es la versión anterior de nuestro archivo recipes/apple_pie.txt
El comando checkout lo que significa es mover el HEAD (o cambiar su contenido) a que referencia a otro branch.
Ahora se adicionan los ingredientes que utiliza lisa para su pie en recipes/apple_pie.txt, se repite el proceso de git add y git commit .
Podemos notar que ahora lisa apunta a un nuevo commit y se leva el objeto HEAD, master no cambio nada, solo lisa que ahora apunta a un nuevo commit, por lo cual podemos deducir que los branch son solo referencias hacia los commit.