Git es un sistema de control de versiones distribuido gratuito y de código abierto diseñado para manejar todo, desde proyectos pequeños hasta proyectos muy grandes, con rapidez y eficiencia. Git se basa en el desarrollo distribuido de software donde más de un desarrollador puede tener acceso al código fuente de una aplicación específica y puede modificar los cambios que pueden ver otros desarrolladores.
Como todos sabemos, git permite que un equipo de personas trabajen juntas, todas usando los mismos archivos. Y ayuda al equipo a lidiar con la confusión que suele ocurrir cuando varias personas editan los mismos archivos. Mientras trabajamos con Git, hemos visto muchas veces que el término HEAD aparece en muchos lugares, como confirmaciones, extracciones, etc.
HEAD es la referencia a la confirmación más reciente en la rama actual. Esto significa que HEAD es como un puntero que realiza un seguimiento de la última confirmación en su rama actual.
Sin embargo, esta definición solo nos brinda una descripción general básica sobre HEAD, por lo que antes de profundizar en HEAD, aprendamos dos cosas antes de que sean referencias y cabeza.
árbitros y jefes
Cuando inicializa su directorio local en un repositorio de git, ve que se crea una carpeta .git . Ahora vamos a crear un archivo demo.txt y agregar este archivo al área de preparación y confirmar los cambios.
Ahora entremos en la carpeta .git/refs, podemos ver que se crean dos subdirectorios más que son encabezados y etiquetas. Dentro de la carpeta heads, puede encontrar los nombres de las ramas como maestro, principal, etc., y en etiquetas como v0.2, v0.3, etc. Todos estos son ejemplos de referencias.
Cuando hablamos del nombre de la rama en la carpeta heads, una referencia como master representa la sugerencia (ID de confirmación más reciente) en esa rama y esto se llama head. En esta carpeta, podemos encontrar diferentes archivos para diferentes ramas y cada archivo representará la última ID de confirmación de esa rama. Por lo tanto, si se realiza alguna de las nuevas confirmaciones, este archivo mantiene un registro de las últimas confirmaciones.
Veamos en qué consiste el archivo maestro de la siguiente manera:
Podemos ver que nuestro compromiso se está escribiendo en el archivo maestro, puede verificar su ID de compromiso usando el comando git log .
Para concluir, las referencias y los encabezados son punteros a las últimas confirmaciones, en forma de archivos donde el nombre del archivo representa el nombre de la rama y contienen la ID de confirmación a la que apunta la rama. Del mismo modo, si desea ver las etiquetas, puede verlas en la ruta .git/refs/tags . Si desea obtener más información sobre las etiquetas y qué contenido contienen los archivos en la carpeta .git.
Ahora volvamos a nuestra pregunta principal: ¿qué es HEAD?
Ahora que hemos aprendido sobre referencias y cabezas, aprendamos sobre HEAD. HEAD se puede denominar como una referencia especial que apunta a la confirmación actual. Sin embargo, HEAD puede cambiar dependiendo de la última confirmación que hayamos revisado en nuestro directorio git. Podemos ver nuestro HEAD en el archivo .git/HEAD . Veamos en qué consiste nuestro archivo HEAD como se muestra a continuación:
Esto le dice a Git que el directorio de trabajo apunta actualmente a la rama maestra. Si creamos otra rama, estaría apuntando a esa rama. Veámoslo con la ayuda de un ejemplo:
Podemos ver que hemos creado una rama llamada principal, y nuestro HEAD ahora apunta a la rama principal. También puede verificar en su carpeta .git/refs/heads .
Agreguemos ahora más compromisos a nuestra rama maestra y veamos hacia dónde apunta nuestro HEAD.
Aquí hemos agregado Hello Geeks en el archivo demo.txt.
Uno puede verificar su HEAD usando el comando git show HEAD .
Tenemos 2 confirmaciones y nuestro HEAD ahora apunta a la confirmación más reciente que hemos realizado. También puede verificar esto en su archivo . carpeta git/refs/heads .
Hablemos ahora de otra terminología de HEAD que es HEAD separado.
HEAD separado significa que cuando la confirmación HEAD no apunta a la confirmación más reciente, entramos en un estado llamado HEAD separado.
Puede cambiar la orientación de HEAD usando el comando:
git checkout <commit ID>
Creamos 2 compromisos y nuestro HEAD apunta al segundo compromiso donde agregamos «Hello Geeks» a nuestro archivo, así que apuntemos nuestro HEAD al primer compromiso que creamos.
Podemos ver la última línea que indica que HEAD ahora está en 01cbf53 Created demo.txt . Básicamente, dice que HEAD ahora apunta a la confirmación 01cbf53. Revisemos nuestro archivo HEAD en .git/HEAD.
Tan pronto como escribimos el comando git checkout, podemos ver que nuestro repositorio de trabajo ahora regresa a la ID de confirmación que hemos puesto. Puede consultar su demo.txt . Estaría vacío porque en la primera confirmación acabamos de crear demo.txt.
Y sí, obtuvimos el mismo ID de compromiso que esperábamos.
Nota: Geeks, ahora deben estar preguntándose por qué deberíamos usar HEAD.
Como se ve en el ejemplo anterior, volver al compromiso anterior se vuelve fácil y es bastante útil en nuestra profesión laboral. El concepto de HEAD separado es útil ya que podemos ver la versión anterior de ese archivo en contexto.
Sin embargo, si solo queremos revertir ese archivo específico, podemos ejecutar el siguiente comando de la siguiente manera:
git checkout <commit ID> <file>
Publicación traducida automáticamente
Artículo escrito por atharvapaliwal7 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA