git reflog puede venir a tu rescate.
Escríbalo en su consola y obtendrá una lista de su historial de git junto con SHA-1 que los representa.
Simplemente revise cualquier SHA-1 al que desee volver
Antes de responder, agreguemos algunos antecedentes, explicando qué es esto HEAD.
First of all what is HEAD?
HEADes simplemente una referencia a la confirmación actual (más reciente) en la rama actual.
Solo puede haber uno HEADen un momento dado. (excluyendo git worktree)
El contenido de HEADse almacena adentro .git/HEADy contiene los 40 bytes SHA-1 de la confirmación actual.
detached HEAD
Si no está en la última confirmación, lo que significa que HEADapunta a una confirmación anterior en el historial, se llama detached HEAD.

En la línea de comando, se verá así: SHA-1 en lugar del nombre de la rama, ya HEADque no apunta a la punta de la rama actual


Algunas opciones sobre cómo recuperarse de un HEAD desprendido:
git checkout <commit_id>
git checkout -b <new branch> <commit_id>
git checkout HEAD~X // x is the number of commits t go back
Esto comprobará una nueva rama que apunta a la confirmación deseada.
Este comando se ejecutará en una confirmación determinada.
En este punto, puede crear una rama y comenzar a trabajar a partir de este punto.
# 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>
Siempre puedes usar el reflogtambién.
git reflogmostrará cualquier cambio que haya actualizado HEADy comprobar la entrada de reflog deseada volverá a establecer HEADesta confirmación.
Cada vez que se modifica HEAD habrá una nueva entrada en el reflog
git reflog
git checkout HEAD@{...}
Esto te llevará de regreso a tu compromiso deseado

"Mueve" tu HEAD de nuevo a la confirmación deseada.
# 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 Git 2.7 )
también puedes usar el git rebase --no-autostash.
"Deshacer" el compromiso dado o el rango de compromiso.
El comando de reinicio "deshará" cualquier cambio realizado en la confirmación dada.
Se confirmará una nueva confirmación con el parche para deshacer, mientras que la confirmación original también permanecerá en el historial.
# 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 qué comando hace qué.
Como puede ver, reset && checkoutmodifique el HEAD.
