Da Anonimo (non verificato) , 29 Aprile 2026

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 / SottocomandoDescrizione
show <ref>Visualizza reflog per un ref (default HEAD).
expirePota vecchie entry.
--expire=<time>Fa scadere entry più vecchie di questo.
--expire-unreachable=<time>Per commit irraggiungibili da qualsiasi ref.
--allOpera 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