Gli pseudo-ref non celebrati
Oltre a HEAD, Git mantiene un piccolo zoo di ref aggiornati automaticamente che registrano cosa e appena successo.
HEAD
Punta al branch corrente o, se distaccato, direttamente a uno SHA di commit.
ORIG_HEAD
Impostato da operazioni distruttive (merge, rebase, reset, am) al precedente tip.
git reset --hard ORIG_HEAD
FETCH_HEAD
git fetch origin
git log HEAD..FETCH_HEAD
git diff HEAD FETCH_HEAD -- src/
MERGE_HEAD e CHERRY_PICK_HEAD
cat .git/MERGE_HEAD
git rev-parse --verify MERGE_HEAD && echo "merge in progress"
REVERT_HEAD, BISECT_*
Marker simili esistono per revert (REVERT_HEAD), bisect, rebase, e AM.
Selettori reflog
git reset --hard HEAD@{1}
git checkout @{-1}
git checkout -
Errori comuni
Confondere ORIG_HEAD con il reflog — ORIG_HEAD viene sovrascritto al prossimo op distruttivo.
Flusso pratico di recupero
git reflog
git branch rescue HEAD@{14}
git reset --hard rescue