Leçon 9 / 20

Lire le reflog local

15 min Git — flux d’équipe et récupération Gratuit

Objectif : Repérer dans le reflog local les déplacements récents de HEAD, comprendre ce que ses entrées indiquent et identifier un commit à examiner après une opération Git inattendue.

Après un rebase ou un déplacement de branche, le commit que vous cherchiez peut ne plus apparaître dans l’historique courant. Cela ne signifie pas nécessairement que son identifiant est immédiatement introuvable. Le reflog conserve localement des traces des déplacements récents de HEAD, ce qui vous aide à reconstituer ce qui s’est passé.

Dans les leçons précédentes, vous avez appris à confirmer une régression en comparant un commit à son parent. Ici, vous ne cherchez pas encore à réparer une branche : vous lisez les mouvements récents de votre dépôt pour retrouver un point de départ à examiner.

Consulter les déplacements récents de HEAD

Le reflog, abréviation de « reference log », est un journal local des mises à jour de références, notamment des déplacements de HEAD. Une entrée contient généralement un identifiant de commit, le nom de la référence concernée et une indication de l’action effectuée, comme un changement de branche, un commit ou un rebase. Utilisez-le lorsque l’état courant ne vous permet pas de comprendre comment vous êtes arrivé à une révision donnée.

Terminal
git reflog
Résultat attendu
b7c31a2 HEAD@{0}: rebase (finish): returning to refs/heads/feature/navigation
4a82d10 HEAD@{1}: rebase (pick): corriger le lien de retour
92fd6b8 HEAD@{2}: rebase (start): checkout main
f15e902 HEAD@{3}: commit: ajouter la navigation du guide
f15e902 HEAD@{4}: checkout: moving from main to feature/navigation

Chaque ligne indique une position de HEAD dans le journal : HEAD@{0} correspond à la position la plus récente, puis les numéros augmentent vers le passé. Dans cet exemple, la séquence montre un rebase terminé, ses étapes, puis un commit antérieur. Les identifiants abrégés sont ceux à relever pour poursuivre l’enquête ; les libellés décrivent les opérations, mais ne prouvent pas à eux seuls que le contenu recherché s’y trouve.

Lire une entrée sans confondre les références

L’expression HEAD@{n} désigne une position passée de HEAD dans le reflog, et non une branche permanente. Elle peut servir à examiner le commit correspondant avec une commande de lecture, par exemple git show. Le nom de branche mentionné dans le message d’une entrée aide à situer l’opération, mais le journal décrit le déplacement de la référence dans votre clone local.

Terminal
git show --stat HEAD@{3}
git show --format=fuller --no-patch f15e902
Résultat attendu
Le premier affichage présente le résumé des fichiers modifiés à HEAD@{3}. Le second affiche les métadonnées du commit f15e902, notamment son auteur, sa date et son message, sans afficher le diff.

Dans un incident sur le dépôt du site, vous pouvez ainsi vérifier si une opération récente a déplacé la branche de travail au-delà du commit qui contenait une modification attendue. Examinez l’identifiant, le message et les fichiers concernés avant de conclure. Ne vous fiez pas uniquement à une position numérotée : après de nouvelles opérations, les numéros du reflog changent.

Utiliser le reflog comme trace, pas comme preuve unique

Le reflog répond à une question de chronologie : quelles positions de référence ce clone a-t-il enregistrées récemment ? Il ne documente pas les intentions de la personne qui a lancé la commande, et il n’enregistre pas toutes les actions effectuées ailleurs. Croisez donc une entrée pertinente avec les métadonnées du commit et, si nécessaire, les fichiers concernés, afin de sélectionner un identifiant à examiner sans modifier le dépôt.

Le journal a une portée limitée dans le temps : les entrées ne constituent pas une archive permanente. Leur expiration et la manière de préserver un commit retrouvé seront traitées dans les prochaines leçons. Pour l’instant, notez l’identifiant candidat et les indices qui justifient votre choix ; n’effectuez aucune opération de restauration sur la seule base d’un numéro HEAD@{n}.

À retenir

  • Lancez `git reflog` dans le clone où le déplacement de HEAD a eu lieu.
  • Lisez les entrées de la plus récente (`HEAD@{0}`) vers les plus anciennes et repérez les opérations pertinentes.
  • Examinez l’identifiant candidat et les métadonnées avec des commandes de lecture, sans déduire son contenu du seul libellé.
  • Gardez à l’esprit que le reflog est local et temporaire ; il ne constitue pas l’historique partagé du dépôt.

Dans la prochaine leçon, vous apprendrez à préserver un commit retrouvé avant de décider comment réintégrer son contenu.

Envie d'aller plus loin ?

Les cours Enovatic sont gratuits et le resteront. Si vous cherchez un accompagnement encadré, nos formations professionnelles sont animées par les mêmes formateurs.