Algunas otras buenas referencias sobre esos temas:
Yo uso el índice como punto de control .
Cuando estoy a punto de hacer un cambio que podría salir mal, cuando quiero explorar alguna dirección en la que no estoy seguro si puedo seguir adelante o incluso si es una buena idea, como una refactorización o cambio conceptual exigente tipo de representación: controlo mi trabajo en el índice. Si este es el primer cambio que he realizado desde mi última confirmación, entonces puedo usar el repositorio local como punto de control, pero a menudo tengo un cambio conceptual que estoy implementando como un conjunto de pequeños pasos. Quiero hacer un punto de control después de cada paso, pero guarde el commit hasta que haya vuelto a trabajar, código probado.
Notas:
el espacio de trabajo es el árbol de directorios de los archivos (de origen) que ve y edita.
El índice es un archivo binario único, grande, <baseOfRepo>/.git/index
que enumera todos los archivos de la rama actual, sus sumas de comprobación sha1 , marcas de tiempo y el nombre del archivo; no es otro directorio con una copia de los archivos.
El repositorio local es un directorio oculto ( .git
) que incluye un objects
directorio que contiene todas las versiones de cada archivo en el repositorio (ramas locales y copias de ramas remotas) como un archivo comprimido "blob".
No piense en los cuatro 'discos' representados en la imagen de arriba como copias separadas de los archivos repos.
Básicamente son referencias nombradas para las confirmaciones de Git. Hay dos tipos principales de referencias: etiquetas y cabezas.
- Las etiquetas son referencias fijas que marcan un punto específico en la historia, por ejemplo v2.6.29.
- Por el contrario, las cabezas siempre se mueven para reflejar la posición actual del desarrollo del proyecto.
(nota: como se ha comentado por Timo Huovinen , esas flechas no lo que los compromete señalan son, que es el fin del flujo de trabajo , básicamente mostrando flechas como 1 -> 2 -> 3 -> 4
donde 1
se cometen la primera y 4
es la última)
Ahora sabemos lo que está sucediendo en el proyecto.
Pero para saber qué está sucediendo aquí, en este momento hay una referencia especial llamada HEAD. Tiene dos propósitos principales:
- le dice a Git qué compromiso tomar archivos de cuando realiza el pago, y
- le dice a Git dónde poner nuevas confirmaciones cuando se compromete.
Cuando lo ejecuta git checkout ref
, apunta HEAD
a la referencia que ha designado y extrae archivos de ella. Cuando lo ejecuta git commit
, crea un nuevo objeto de confirmación, que se convierte en hijo de current HEAD
. Normalmente HEAD
apunta a una de las cabezas, por lo que todo funciona bien.
HEAD
es el commit en la punta de la rama actual. Si acaba de retirar la rama, es decir, no tiene archivos modificados, entonces su contenido coincide con el árbol de trabajo. Tan pronto como modifiques algo, ya no coincidirá.