Testar com HEAD Destacado e Normal
Nas etapas anteriores, aprendemos que HEAD geralmente aponta para uma branch, como master. Este é o estado "normal". No entanto, HEAD também pode apontar diretamente para um commit específico. Isso é chamado de estado de "HEAD destacado" (detached HEAD).
Vamos ver como um HEAD destacado se parece. Primeiro, precisamos do ID do commit do nosso primeiro commit. Podemos obter isso usando git log --oneline:
cd ~/project/my-time-machine
git log --oneline
Você deve ver uma saída semelhante a esta (seu ID de commit será diferente):
a1b2c3d (HEAD -> master) Send a message to the future
Os primeiros sete caracteres (a1b2c3d neste exemplo) são o ID de commit abreviado. Copie este ID.
Agora, vamos mover HEAD para apontar diretamente para este commit usando git checkout:
git checkout <your_commit_id>
Substitua <your_commit_id> pelo ID de commit abreviado real que você copiou de git log --oneline. Por exemplo:
git checkout a1b2c3d
Você verá uma saída indicando que está em um estado de HEAD destacado:
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
Agora, vamos verificar o status novamente:
git status
A saída mostrará claramente que você está em um estado de HEAD destacado:
HEAD is now at a1b2c3d Send a message to the future
nothing to commit, working tree clean
E se usarmos git symbolic-ref HEAD, ele mostrará um erro porque HEAD não é uma referência simbólica para uma branch:
git symbolic-ref HEAD
Este comando provavelmente produzirá um erro ou nenhuma saída, indicando que HEAD não é uma referência simbólica.
Para retornar ao estado normal, onde HEAD aponta para a branch master, podemos fazer checkout da branch master:
git checkout master
Você deve ver uma saída como esta:
Switched to branch 'master'
Agora, git status mostrará que você está de volta na branch master:
git status
Saída:
On branch master
nothing to commit, working tree clean
E git symbolic-ref HEAD mostrará novamente a referência simbólica:
git symbolic-ref HEAD
Saída:
refs/heads/master
Compreender a diferença entre um HEAD anexado (apontando para uma branch) e um HEAD destacado (apontando diretamente para um commit) é importante para navegar na história do seu projeto e realizar operações avançadas do Git.