git reflog
Afficher où HEAD et les branches sont passées
La commande 'git reflog' liste chaque position qu’a eue HEAD : chaque commit, changement de branche, reset, fusion et rebase, du plus récent au plus ancien. Elle est propre à votre dépôt et sert de filet de sécurité pour le travail perdu — les commits retirés d’une branche par un reset ou un rebase y figurent encore et se récupèrent avec HEAD@{n}. Par défaut, les entrées expirent après 90 jours.
Synopsis
git reflog [show] [<log-options>] [<ref>]Options
Choisir la bonne option
log ou reflog
Deux historiques
| Commande | Liste | Partagé ? |
|---|---|---|
git log | Les commits accessibles depuis une branche | Oui, avec les commits |
git reflog | Chaque déplacement de HEAD, même vers des commits qu’aucune branche n’a | Non, local seulement |
Exemples
Lister les déplacements de HEAD
git reflogDu plus récent au plus ancien, avec les noms HEAD@{n}.
Annuler un reset
git reset --hard HEAD@{1}Revenir là où était HEAD un déplacement plus tôt.
Reflog d’une branche
git reflog show mainSeulement les déplacements de main.
Exemples de workflows
git reflogTrouver l’entrée d’avant le reset
git reset --hard HEAD@{1}Y revenir
git reflogTrouver le dernier commit de cette branche
git switch -c feature/login a1b2c3dRecréer la branche à cet endroit
Dépannage
Le commit n’est pas dans le reflog
Cause : Il n’a jamais été extrait ici, ou l’entrée a expiré
Essayez git fsck --lost-found pour les commits orphelins
HEAD@{1} pointe vers un endroit inattendu
Cause : Chaque changement de branche compte aussi comme un déplacement
Lisez le reflog et choisissez l’entrée exacte
Astuces et pièges
Bonnes pratiques
- ✓Consultez git reflog avant de paniquer à cause de commits perdus.
- ✓Récupérez d’abord sur une nouvelle branche (git switch -c rescue <hash>) pour examiner sans risque.
Erreurs fréquentes
- ✗Croire qu’un reset --hard a supprimé des commits pour de bon — le reflog les a encore.
- ✗Attendre trop longtemps : les commits inaccessibles disparaissent quand les entrées du reflog expirent et que git gc passe.
- ✗S’attendre à trouver le reflog sur une autre machine — il n’est jamais poussé ni cloné.
FAQ
Par défaut, 90 jours pour les entrées accessibles, 30 jours pour les inaccessibles.
Non, il liste seulement. Ce sont git reflog expire et delete qui retirent des entrées.