Sinossi
git reflog [show] [<ref>]
git reflog expire [--expire=<time>] [--all]
git reflog delete <entry>
Descrizione
Il comando git reflog mostra la storia di dove ogni ref (HEAD, branch) ha puntato localmente. Ogni movimento — commit, checkout, reset, rebase — viene loggato con timestamp e ragione. Il reflog è la tua rete di sicurezza: anche dopo un'operazione "distruttiva" come git reset --hard, lo stato precedente è recuperabile finché l'entry reflog sopravvive (tipicamente 90 giorni).
I ref nel reflog sono indirizzabili come HEAD@{2} ("valore di HEAD 2 movimenti fa") o HEAD@{2.hours.ago}. Per recuperare un branch "perso", trova il suo vecchio SHA nel reflog e crea un nuovo branch da esso.
Nell'uso quotidiano, git reflog si integra con alias e CI.
Capire il modello dati di Git aiuta a prevedere i risultati.
Opzioni comuni
| Opzione / Sottocomando | Descrizione |
|---|---|
show <ref> | Visualizza reflog per un ref (default HEAD). |
expire | Pota vecchie entry. |
--expire=<time> | Fa scadere entry più vecchie di questo. |
--expire-unreachable=<time> | Per commit irraggiungibili da qualsiasi ref. |
--all | Opera su ogni ref. |
delete <entry> | Rimuove una singola entry. |
Esempi
git reflog
# Movimenti recenti di HEAD
git reflog show feature/api
# Solo storia del feature branch
git reset --hard HEAD@{1}
# Recupera da un reset sbagliato tornando indietro di un movimento
git reflog expire --expire=30.days --all
# Riduci il reflog agli ultimi 30 giorni per ogni ref
Errori comuni
I reflog sono SOLO LOCALI — fare fetch da un remote non include il loro reflog. Le entry reflog scadono alla fine; non affidarti ad essi per il recupero a lungo termine. Eseguire git gc --prune=now dopo aver fatto scadere il reflog può rimuovere permanentemente commit irraggiungibili.
Comandi correlati
git reset, git rebase, git fsck, git gc