Git School · FluxGit

git reset --hard mit Reflog rückgängig machen

FluxGit ·

Die Blöcke sind verschiedene Fälle, kein Gesamtskript. Wähle den passenden Fall. Branchnamen, Pfade und VERIFIED_COMMIT vor Nutzung ersetzen. Abbruchbefehle gelten nur für ihre laufende Operation; nicht beide Alternativen ausführen.

Kurzantwort

Nach git reset --hard suchst du den früheren Commit im Reflog, prüfst ihn und erstellst einen Rettungsbranch. Sein Commit-Objekt muss noch vorhanden sein.

Beispiel und Voraussetzungen

Dieser Ablauf rettet bereits committete Arbeit. Das Reflog speichert keine Änderungen, die nur im Arbeitsverzeichnis vorhanden waren.

Vor Änderungen prüfen

Vermeide weitere Resets, Rebases und Branchwechsel. Lies git reflog und prüfe git show, bevor du eine Referenz verschiebst.

git status --short
git reflog --date=iso
git show VERIFIED_COMMIT

Referenz oder getrennten Checkout behalten

Erstelle rescue/lost-work auf VERIFIED_COMMIT. Damit erhält der Commit einen Namen, ohne deinen aktuellen Branch oder die Arbeitsdateien zu verändern.

git branch rescue/lost-work VERIFIED_COMMIT
git log -5 --oneline rescue/lost-work

Erster Ablauf

Prüfe Verlauf und Patch des geretteten Branches. Du kannst ihn in einem anderen Checkout ansehen oder gewünschte Änderungen gezielt integrieren.

Anderes Ergebnis bewusst wählen

Ein direkter Reset auf den gefundenen Commit verändert erneut Branch, Index und Dateien. Sichere zuerst aktuelle Änderungen und eine Rettungsreferenz.

Grenzen und Ausnahmen

HEAD@{1} bezeichnet eine Reflog-Position, nicht zwingend den richtigen Commit. ORIG_HEAD kann die frühere Spitze enthalten, aber andere Operationen können es ersetzen.

Konflikte und Aufräumen

Reflog-Ablauf und Objektbereinigung haben getrennte konfigurierbare Regeln. Ein alter Eintrag kann ein bereits entferntes Objekt nicht wiederherstellen.

Ergebnis prüfen

Prüfe Commit, Dateien und Verlauf des Rettungsbranches. Führe passende Tests aus, bevor du die Änderungen übernimmst.

git show --stat rescue/lost-work
git status --short

Häufige Fragen

git revert erstellt einen umkehrenden Commit und versetzt den Branch nicht vor den Reset. Für nur gestagte Inhalte kann git fsck Blobs finden, ohne Dateinamen oder Struktur zu garantieren.

Operation in FluxGit prüfen

FluxGit vereint Reflog-Bewegungen und Wiederherstellungspunkte in Safety Timeline. Bei aktivierter Funktion und erkannten lokalen Änderungen kann ein abgedeckter Reset einen Sicherheits-Stash erstellen; der Terminal-Reset im Tutorial nutzt diesen Schutz nicht.

Offizielle Git-Referenzen

Git School · 1:50

git reset --hard rückgängig machen: verlorenen Commit zurückholen

Stelle eine committete Änderung nach git reset --hard über das lokale Reflog wieder her, solange das Commit-Objekt erhalten bleibt. Nach Ablauf des Reflogs oder Bereinigung der Objekte ist eine Wiederherstellung nicht garantiert.

git reset --hard rückgängig machen: verlorenen Commit zurückholen
Englische Erzählung. Auf YouTube gibt es manuelle Untertitel in 11 Sprachen. Dieses Transkript ist auf Deutsch.

Auf YouTube ansehen — öffnet einen neuen Tab

In einem Test-Repository aufgenommen.

Transkript der Erzählung lesen
  1. 00:03 Du hast git reset --hard ausgeführt, und dein letzter Commit ist weg. Das passiert jedem einmal. So holst du ihn zurück, und deshalb funktioniert es.
  2. 00:12 Zuerst eine Änderung, bereits committet: den Zahlungsaufruf zweimal erneut versuchen.
  3. 00:19 Dann im Terminal: git reset --hard HEAD~1.
  4. 00:24 FluxGit erkennt es sofort. Der Branch wurde zurückgesetzt, und der Commit liegt nicht mehr darauf.
  5. 00:31 Deshalb ist er nicht verloren. Ein Branch ist nur eine Markierung auf einem Commit. Der Reset verschiebt die Markierung zurück, aber der Commit bleibt im Repository, und das Reflog, das Tagebuch von Git, führt ihn weiterhin auf. Erstelle einen Branch auf diesem Commit, und er ist zurück.
  6. 00:47 In FluxGit erklärt Recover lost work das in einfachen Worten und führt dich an die richtige Stelle.
  7. 00:59 Die Safety Timeline beschreibt den Reset in einem Satz. Erstelle einen Branch ausgehend vom Zeitpunkt davor.
  8. 01:06 Dein Commit ist zurück, auf einem eigenen Branch.
  9. 01:10 Nicht committete Änderungen stehen nicht im Reflog. Wenn Wiederherstellungspunkte aktiviert sind und lokale Änderungen erkannt werden, kann FluxGit vor einem Hard Reset einen Sicherheits-Stash speichern. Dieser direkt im Git-Terminal ausgeführte Reset umgeht diesen Schutz.
  10. 01:26 Dasselbe im Terminal: git reflog, suche den Eintrag vor dem Reset und erstelle einen Branch auf diesem Commit.
  11. 01:34 Zusammengefasst: Ein Reset verschiebt eine Markierung. Das Reflog merkt sich, wo sie war. Erstelle einen Branch, um den Commit zu behalten. Nächste Lektion: einen gelöschten Branch wiederherstellen.

Verwandte Abläufe

FluxGit herunterladen