Prueba con HEAD desatachado 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.