Von Gast (nicht überprüft) , 29 April 2026

Einführung

Das Reflog zeichnet jede Änderung an HEAD und an jeder Branch-Spitze auf Ihrer lokalen Maschine auf. Es ist lokal, pro Klon, und wird nicht gepusht. Nahezu jeder "verlorene" Commit kann darüber gerettet werden.

Anzeigen

git reflog                            # HEAD-Reflog
git reflog show main                  # Reflog von main
git reflog --date=iso
git log -g --oneline                  # Log-Lauf durch das Reflog

Jeder Eintrag hat eine Sequenz (HEAD@{0}, HEAD@{1}, ...), eine Aktion (commit, reset, merge, rebase, ...) und einen Ziel-SHA.

Einen verlorenen Commit wiederherstellen

git reflog
# 9f8a1c2 HEAD@{0}: reset: moving to HEAD~3
# a1b2c3d HEAD@{1}: commit: Important work
git switch -c rescued a1b2c3d

Oder direkt:

git reset --hard HEAD@{1}

Zeitbasierte Syntax

git show HEAD@{2.hours.ago}
git diff main@{yesterday} main

Git interpretiert @{...} entweder als Zähler oder als Datum.

Reflog-Ablauf

Standardmäßig laufen erreichbare Reflog-Einträge nach 90 Tagen ab, unerreichbare nach 30:

git config gc.reflogExpire 90.days
git config gc.reflogExpireUnreachable 30.days

Bis zum Ablauf bleiben selbst hard-resettete Commits wiederherstellbar.

Pro-Ref-Reflogs

Jeder Branch hat ein eigenes Reflog unter .git/logs/refs/heads/<name>. Stash hat ebenfalls eines (refs/stash):

git reflog show stash

Reflog beschneiden

git reflog expire --expire=now --all
git gc --prune=now

Nur verwenden, wenn Sie Daten dauerhaft löschen müssen; dies entfernt das Sicherheitsnetz.

Reflog vs. git log

git log durchläuft den Commit-Graphen über Eltern-Zeiger; das Reflog läuft aufgezeichnete Bewegungen einer Ref ab. Nach einem Force-Reset zeigt git log die aufgegebenen Commits nicht mehr, das Reflog aber schon.

Pro-Ref-Reflog-Inspektion

Jede Ref führt ein eigenes Reflog. Inspizieren Sie das Reflog eines bestimmten Branches, um zu sehen, wie sich seine Spitze bewegte:

git reflog show feature/login
git log -g feature/login --oneline
cat .git/logs/refs/heads/feature/login

Nützlich beim Untersuchen von "wer hat diesen Branch bewegt?" auf einem lokalen Klon. Das Reflog-Dateiformat ist eine Zeile pro Änderung mit altem SHA, neuem SHA, Committer, Zeitstempel und einer textuellen Nachricht. Kombiniert mit git blame auf der Datei ergibt es einen vollständigen lokalen Audit-Trail; denken Sie daran, dass Reflogs nicht gepusht werden, daher deckt der Trail nur Ihre Maschine ab.

Häufige Fehler

In Panik vergessen, dass das Reflog existiert, und Stunden Arbeit wiederholen, die leicht wiederherstellbar gewesen wäre. Prüfen Sie immer zuerst git reflog. Während der Wiederherstellung pushen und annehmen, das Reflog liege auf dem Server; tut es nicht, nur Ihr lokaler Klon hat es. git gc --prune=now aus einem "Aufräumen"-Instinkt ausführen und das Sicherheitsnetz für jeden unreferenzierten Commit zerstören. Und schließlich: Reflog-Einträge als ewig behandeln; lange gelöschte Refs altern aus. Taggen oder branchen Sie alles, was Sie behalten wollen, bevor 30 Tage vergehen.