Les pseudo-refs peu célébrées
Au-delà de HEAD, Git maintient un petit zoo de refs automatiquement mises à jour qui enregistrent ce qui vient de se passer. Les connaître transforme "j'ai supprimé mon travail" en récupération d'une ligne.
HEAD
Pointe vers la branche actuelle ou, en détaché, directement vers un SHA de commit.
ORIG_HEAD
git reset --hard ORIG_HEAD
FETCH_HEAD
git fetch origin
git log HEAD..FETCH_HEAD
git diff HEAD FETCH_HEAD -- src/
MERGE_HEAD et CHERRY_PICK_HEAD
cat .git/MERGE_HEAD
git rev-parse --verify MERGE_HEAD && echo "merge en cours"
REVERT_HEAD, BISECT_*
Des marqueurs similaires existent pour revert, bisect, rebase et AM.
Sélecteurs reflog
git reset --hard HEAD@{1}
git checkout @{-1}
git checkout -
Erreurs courantes
Confondre ORIG_HEAD avec le reflog — ORIG_HEAD est écrasé à la prochaine op destructrice.
Flux pratique de récupération
git reflog
git branch rescue HEAD@{14}
git reset --hard rescue