Qualquer verificação de uma confirmação que não seja o nome de uma de suas filiais, resultará em um HEAD desanexado. Um SHA1 que representa a ponta de um ramo ainda fornece uma CABEÇA desanexada. Somente uma verificação de um nome de filial local evita esse modo.
Veja confirmação com um HEAD desanexado
Quando HEAD é desanexado, confirma o trabalho normalmente, exceto que nenhuma ramificação nomeada é atualizada. (Você pode pensar nisso como um ramo anônimo.)

Por exemplo, se você fizer check-out de uma "ramificação remota" sem rastrear primeiro, poderá terminar com um HEAD desanexado.
Veja git: switch branch sem destacar a cabeça
Com o Git 2.23 (agosto de 2019), você não precisa usar o comando confusogit checkout .
git switch também pode fazer checkout de uma filial e obter um HEAD desanexado, exceto:
- tem uma
--detachopção explícita
Para verificar o commit HEAD~3para inspeção temporária ou experimento sem criar uma nova ramificação:
git switch --detach HEAD~3
HEAD is now at 9fc9555312 Merge branch 'cc/shared-index-permbits'
- ele não pode desanexar por engano um ramo de rastreamento remoto
Vejo:
C:\Users\vonc\arepo>git checkout origin/master
Note: switching to 'origin/master'.
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 without impacting any branches by switching back to a branch.
Vs. usando o novo git switchcomando:
C:\Users\vonc\arepo>git switch origin/master
fatal: a branch is expected, got remote branch 'origin/master'
Se você deseja criar uma nova filial local, rastreando uma filial remota:
git switch <branch>
Se <branch>não for encontrado, mas existir um ramo de rastreamento em exatamente um controle remoto (chame-o <remote>) com um nome correspondente, trate como equivalente a
git switch -c <branch> --track <remote>/<branch>
Não há mais erro!
Não há mais CABEÇA destacada e indesejada!
branch-name@{n}, a nona posição anterior debranch-name. Mas não importa o que, em algum momento deve ter havido umgit checkout <rev>. Se isso não tocar, provavelmente você fez o que Will mencionou - tentou fazergit checkout <file>e conseguiu especificar uma revisão por acidente.