tipos tag remove practices etiquetas crear best git head

tag - ¿Qué es la CABEZA en git?



git tag best practices (4)

Parece que hay una diferencia entre la última confirmación, el HEAD y el estado del archivo que puedo ver en mi directorio.

¿Qué es HEAD, qué puedo hacer con él y qué error debo evitar?


Puntero de cabeza en git

Git mantiene una variable de referencia llamada HEAD. Y llamamos a esta variable un puntero, porque su propósito es hacer referencia, o apuntar a, una confirmación específica en el repositorio. A medida que hacemos nuevas confirmaciones, el puntero cambiará o se moverá para apuntar a una nueva confirmación. HEAD siempre apunta a la punta de la rama actual en nuestro repositorio. Ahora, esto tiene que ver con nuestro repositorio, no con nuestro índice de preparación o nuestro directorio de trabajo.

Otra forma de verlo es el último estado de nuestro repositorio o lo que se verificó por última vez, y porque es donde el repositorio se detuvo o el último estado, también puede decir que HEAD apunta al padre de la próxima confirmación o es donde se llevará a cabo la escritura de compromiso.

Creo que una buena metáfora para pensar en esto es la reproducción y la grabación en una grabadora de casete. Cuando comenzamos a grabar audio, la cinta pasa por la cabeza y graba en ella. cuando presionamos Detener, el lugar donde se detiene el cabezal de grabación es el lugar donde comenzará a grabar nuevamente cuando presionamos Grabar por segunda vez. Ahora podemos movernos, podemos mover el cabezal a diferentes lugares, pero donde sea que se coloque cuando volvamos a pulsar Grabar, ahí es donde comenzará la grabación.

El puntero HEAD en Git es muy similar, apunta al lugar donde comenzaremos a grabar a continuación. Es el lugar donde lo dejamos en nuestro repositorio para las cosas que hemos comprometido.


HEAD es una referencia a la última confirmación en la rama actualmente retirada.

Hay una pequeña excepción a esto, que es la CABEZA separada. Un HEAD separado es la situación en la que terminas cada vez que verificas un commit (o tag) en lugar de una rama. En este caso, debes imaginar esto como una rama temporal sin nombre; así que en lugar de tener una referencia de rama nombrada, solo tenemos HEAD. Todavía le permitirá hacer confirmaciones (que actualizarán HEAD), por lo que la breve definición anterior aún es cierta si piensa en una HEAD separada como una rama temporal sin nombre.


HEAD es una referencia (referencia) a la confirmación actualmente verificada.

En los estados normales, en realidad es una referencia simbólica a la rama que ha prestado atención: si observa el contenido de .git / HEAD verá algo como "ref: refs / heads / master". La rama en sí es una referencia a la confirmación en la punta de la rama. Por lo tanto, en el estado normal, HEAD refiere efectivamente a la confirmación en la punta de la rama actual.

También es posible tener una "CABEZA separada". Esto sucede cuando verifica algo además de una rama (local), como una rama remota, un compromiso específico o una etiqueta. El lugar más común para ver esto es durante una rebase interactiva, cuando elige editar una confirmación. En el estado HEAD separado, su HEAD es una referencia directa a un compromiso: el contenido de .git / HEAD será un hash SHA1.

En términos generales, HEAD es solo un nombre conveniente que significa "lo que has comprobado" y realmente no tienes que preocuparte mucho por eso. Solo tenga en cuenta lo que ha comprobado y recuerde que probablemente no quiera comprometerse si no está en una sucursal (estado HEAD separado) a menos que sepa lo que está haciendo (por ejemplo, está en una rebase interactiva) .


Esto debería haber sido un comentario, pero es demasiado largo para un compromiso

Siempre pensé que HEAD~5 significa IR a 5 confirmaciones antes. No lleva la parte GO del comando. Solo lleva la referencia / ''donde'' parte del comando.

En términos sencillos, se utiliza para responder la pregunta de: ¿A DÓNDE debo ir? ¿A qué comprometerse?

Si usted dice

HEAD significa (la referencia a) compromiso actual.

HEAD~1 significa (la referencia a) 1 cometer antes

HEAD~87 significa (la referencia a) 87 confirmaciones antes

git checkout HEAD~1 realmente irá a esa referencia / cometer