Par Anonyme (non vérifié) , 29 avril 2026

Qu'est-ce qu'une ref

Une ref est un nom qui pointe vers un objet — généralement un commit. Les branches sont des refs sous refs/heads/, les tags sous refs/tags/, le remote-tracking sous refs/remotes/, et les pseudo-refs comme HEAD, FETCH_HEAD, ORIG_HEAD vivent à la racine de .git.

Inspecter les refs

git for-each-ref
git for-each-ref --sort=-committerdate --format='%(refname:short) %(committerdate:relative)' refs/heads
git symbolic-ref HEAD
git update-ref refs/heads/foo <sha>

Le reflog

Chaque changement à une ref est journalisé : déplacements de tip de branche, commits, resets, rebases, fetches. Le reflog est un filet de sécurité par clone, indépendant du graphe d'objets.

git reflog
git reflog show feature
git reflog show HEAD@{2.weeks.ago}
git log -g --oneline
git checkout HEAD@{1}
git branch rescue HEAD@{5}

Expiration du reflog

git config gc.reflogExpire never
git config gc.reflogExpireUnreachable 60.days

Pseudo-refs spéciales

HEAD pointe vers la branche actuelle. ORIG_HEAD enregistre le tip précédent avant les ops destructrices. FETCH_HEAD enregistre les tips fetched. MERGE_HEAD existe pendant un merge en cours.

Backend reftable

git init --ref-format=reftable

Erreurs courantes

Faire confiance au reflog pour toujours : il expire. Confondre HEAD@{2} (index reflog) avec HEAD~2 (ancêtre).