git reflog
Zeigt, wo HEAD und die Branches schon waren
Der Befehl 'git reflog' listet jede Position, die HEAD hatte: jeden Commit, Wechsel, Reset, Merge und Rebase, die neueste zuerst. Er ist lokal in deinem Repository und das Sicherheitsnetz für verlorene Arbeit — Commits, die ein Reset oder Rebase von einem Branch entfernt hat, stehen noch darin und lassen sich mit HEAD@{n} zurückholen. Einträge verfallen standardmäßig nach 90 Tagen.
Syntax
git reflog [show] [<log-options>] [<ref>]Optionen
Die richtige Option wählen
log oder reflog
Zwei Historien
| Befehl | Listet | Geteilt? |
|---|---|---|
git log | Commits, die von einem Branch erreichbar sind | Ja, mit den Commits |
git reflog | Jede Bewegung von HEAD, auch zu Commits, die kein Branch hat | Nein, nur lokal |
Beispiele
Bewegungen von HEAD auflisten
git reflogDie neueste zuerst, mit Namen HEAD@{n}.
Einen Reset rückgängig machen
git reset --hard HEAD@{1}Zurück dorthin, wo HEAD eine Bewegung zuvor war.
Reflog eines Branches
git reflog show mainNur die Bewegungen von main.
Workflow-Beispiele
git reflogDen Eintrag vor dem Reset finden
git reset --hard HEAD@{1}Dorthin zurückgehen
git reflogDen letzten Commit dieses Branches finden
git switch -c feature/login a1b2c3dDen Branch dort neu erstellen
Fehlerbehebung
Der Commit ist nicht im Reflog
Ursache: Er wurde hier nie ausgecheckt, oder der Eintrag ist verfallen
Versuche git fsck --lost-found für verwaiste Commits
HEAD@{1} zeigt an eine unerwartete Stelle
Ursache: Jeder Branch-Wechsel zählt auch als Bewegung
Lies den Reflog und wähle den genauen Eintrag
Tipps & Stolperfallen
Best Practices
- ✓Prüfe git reflog, bevor du wegen verlorener Commits in Panik gerätst.
- ✓Stelle zuerst auf einem neuen Branch wieder her (git switch -c rescue <hash>), um gefahrlos nachzusehen.
Häufige Fehler
- ✗Glauben, ein reset --hard habe Commits endgültig gelöscht — der Reflog hat sie noch.
- ✗Zu lange warten: unerreichbare Commits verschwinden, wenn Reflog-Einträge verfallen und git gc läuft.
- ✗Den Reflog auf einem anderen Rechner erwarten — er wird nie gepusht oder geklont.
FAQ
Standardmäßig 90 Tage für erreichbare, 30 Tage für unerreichbare Einträge.
Nein, es listet nur. Einträge entfernen git reflog expire und delete.