git reflog pode vir em seu socorro.
Digite-o em seu console e você obterá uma lista de seu histórico de git junto com SHA-1 que os representa.
Basta verificar qualquer SHA-1 para o qual deseja reverter
Antes de responder vamos adicionar alguns antecedentes, explicando o que é isso HEAD.
First of all what is HEAD?
HEADé simplesmente uma referência ao commit atual (mais recente) no branch atual.
Só pode haver um HEADem um determinado momento. (excluindo git worktree)
O conteúdo de HEADé armazenado dentro .git/HEADe contém os 40 bytes SHA-1 do commit atual.
detached HEAD
Se você não estiver no último commit - o que significa que HEADestá apontando para um commit anterior no histórico, é chamado detached HEAD.

Na linha de comando, será semelhante a este - SHA-1 em vez do nome do branch, pois o HEADnão está apontando para a ponta do branch atual


Algumas opções sobre como recuperar de um HEAD separado:
git checkout <commit_id>
git checkout -b <new branch> <commit_id>
git checkout HEAD~X // x is the number of commits t go back
Isso fará o checkout de um novo branch apontando para o commit desejado.
Este comando fará checkout para um determinado commit.
Neste ponto, você pode criar uma ramificação e começar a trabalhar a partir deste ponto.
# Checkout a given commit.
# Doing so will result in a `detached HEAD` which mean that the `HEAD`
# is not pointing to the latest so you will need to checkout branch
# in order to be able to update the code.
git checkout <commit-id>
# create a new branch forked to the given commit
git checkout -b <branch name>
Você sempre pode usar o reflogtambém.
git reflogirá exibir qualquer mudança que atualizou o HEADe verificar a entrada de reflog desejada irá definir o HEADretorno para este commit.
Cada vez que o HEAD é modificado, haverá uma nova entrada no reflog
git reflog
git checkout HEAD@{...}
Isso o levará de volta ao commit desejado

"Mova" seu HEAD de volta para o commit desejado.
# This will destroy any local modifications.
# Don't do it if you have uncommitted work you want to keep.
git reset --hard 0d1d7fc32
# Alternatively, if there's work to keep:
git stash
git reset --hard 0d1d7fc32
git stash pop
# This saves the modifications, then reapplies that patch after resetting.
# You could get merge conflicts if you've modified things which were
# changed since the commit you reset to.
- Nota: ( desde o Git 2.7 )
você também pode usar o git rebase --no-autostash.
"Desfazer" o commit ou intervalo de commit fornecidos.
O comando reset irá "desfazer" quaisquer mudanças feitas no commit fornecido.
Um novo commit com o patch undo será confirmado enquanto o commit original também permanecerá no histórico.
# add new commit with the undo of the original one.
# the <sha-1> can be any commit(s) or commit range
git revert <sha-1>
Este esquema ilustra qual comando faz o quê.
Como você pode ver lá, reset && checkoutmodifique o HEAD.
