Probar con HEAD
desvinculado y normal
En los pasos anteriores, aprendimos que HEAD
generalmente apunta a una rama, como master
. Este es el estado "normal". Sin embargo, HEAD
también puede apuntar directamente a un commit específico. Esto se llama estado de "HEAD desvinculado" (detached HEAD).
Veamos cómo se ve un HEAD
desvinculado. Primero, necesitamos el ID del commit de nuestro primer commit. Podemos obtenerlo utilizando git log --oneline
:
cd ~/project/my-time-machine
git log --oneline
Deberías ver una salida similar a esta (tu ID de commit será diferente):
a1b2c3d (HEAD -> master) Send a message to the future
Los primeros siete caracteres (a1b2c3d
en este ejemplo) son el ID corto del commit. Copia este ID.
Ahora, movamos HEAD
para que apunte directamente a este commit utilizando git checkout
:
git checkout <your_commit_id>
Reemplaza <your_commit_id>
con el ID corto real del commit que copiaste de git log --oneline
. Por ejemplo:
git checkout a1b2c3d
Verás una salida que indica que estás en un estado de HEAD
desvinculado:
Note: switching to 'a1b2c3d'.
You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state by switching back to a branch.
If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:
git switch -c <new-branch-name>
Or, if you want to make this branch stay, use:
git branch <new-branch-name> <your_commit_id>
Switched to commit a1b2c3d
Ahora, veamos el estado nuevamente:
git status
La salida mostrará claramente que estás en un estado de HEAD
desvinculado:
HEAD is now at a1b2c3d Send a message to the future
nothing to commit, working tree clean
Y si usamos git symbolic-ref HEAD
, mostrará un error porque HEAD
no es una referencia simbólica a una rama:
git symbolic-ref HEAD
Este comando probablemente producirá un error o no mostrará salida, lo que indica que HEAD
no es una referencia simbólica.
Para volver al estado normal en el que HEAD
apunta a la rama master
, podemos cambiar a la rama master
:
git checkout master
Deberías ver una salida como esta:
Switched to branch 'master'
Ahora, git status
te mostrará que estás de vuelta en la rama master
:
git status
Salida:
On branch master
nothing to commit, working tree clean
Y git symbolic-ref HEAD
mostrará nuevamente la referencia simbólica:
git symbolic-ref HEAD
Salida:
refs/heads/master
Comprender la diferencia entre un HEAD
vinculado (apuntando a una rama) y un HEAD
desvinculado (apuntando directamente a un commit) es importante para navegar por la historia de tu proyecto y realizar operaciones avanzadas de Git.