Por Anónimo (no verificado) , 29 Abril 2026

Las pseudo-refs poco celebradas

Más allá de HEAD, Git mantiene un pequeño zoológico de refs actualizadas automáticamente que registran lo que acaba de pasar. Conocerlas convierte "borré mi trabajo" en una recuperación de una línea.

HEAD

Apunta a la branch actual (e.g., ref: refs/heads/main) o, cuando está desacoplado, a un SHA de commit directamente.

ORIG_HEAD

Establecida por operaciones destructivas (merge, rebase, reset, am) al tip anterior. La recuperación clásica:

git reset --hard ORIG_HEAD

FETCH_HEAD

Actualizada por git fetch. Cada línea es <sha>\t[not-for-merge]\t<descripción>.

git fetch origin
git log HEAD..FETCH_HEAD
git diff HEAD FETCH_HEAD -- src/

MERGE_HEAD y CHERRY_PICK_HEAD

cat .git/MERGE_HEAD
git rev-parse --verify MERGE_HEAD && echo "merge en progreso"

REVERT_HEAD, BISECT_*

Marcadores similares existen para revert, bisect, rebase y AM.

Selectores del reflog

git reset --hard HEAD@{1}
git checkout @{-1}
git checkout -

Errores comunes

Confundir ORIG_HEAD con el reflog — ORIG_HEAD se sobrescribe en la próxima op destructiva.

Flujo práctico de recuperación

git reflog
git branch rescue HEAD@{14}
git reset --hard rescue