Git-Anleitungen
Git-Reset, Rebase und Commits rückgängig machen: So stellen Sie (fast) alles in Git wieder her
Git wirft Arbeit selten endgültig weg. Hier erfahren Sie, wie Sie mit git reflog das letzte Commit, ein Amend, ein Rebase, einen gelöschten Branch oder einen Force-Push rückgängig machen und wie das Undo von GitTree das meiste davon mit einem Klick erledigt.

Um einen Git-Reset, ein Rebase oder ein Commit rückgängig zu machen, führen Sie git reflog aus, suchen Sie den Eintrag direkt vor dem Fehler und verweisen Sie Ihren Branch wieder darauf, zum Beispiel mit git reset --hard HEAD@{1}. Git protokolliert jede Bewegung von HEAD und jedem Zweig im Reflog und behält standardmäßig sogar den Eintrag eines verlorenen Commits 30 Tage lang (90 Tage für Commits, die sich noch in einem Zweig befinden), sodass festgeschriebene Arbeit fast nie verloren geht. Die einzige wirkliche Ausnahme sind Arbeiten, die Sie nie begangen haben.
Nachfolgend finden Sie das Rezept für jeden häufigen Fehler. Jeder Befehl ist reines Git und funktioniert auf macOS, Windows und Linux gleich. Führen Sie sie auf Windows in Git Bash aus, das mit Git for Windows geliefert wird: PowerShell benötigt Reflog-Namen wie HEAD@{1} in Anführungszeichen und hat kein grep. Am Ende werden Sie sehen, wie GitTree, ein Desktop-Git-Client, einen Wiederherstellungs-Snapshot für 19 Arten von Vorgängen erstellt, sodass die meisten Fehler mit einem Klick behoben werden.
Git-Spickzettel rückgängig machen: Der Befehl für jeden Fehler
Finden Sie Ihre Situation heraus und lesen Sie dann den Abschnitt, bevor Sie etwas ausführen. HEAD@{1} bedeutet „wo HEAD vor einem Zug war“; Wenn Sie seitdem andere Befehle ausgeführt haben, suchen Sie zuerst mit git reflog nach der richtigen Zahl.
| Fehler | Befehl | Achten Sie auf |
|---|---|---|
| Letztes Commit, behalten Sie die Änderungen bei | git reset --soft HEAD~1 | Nur für Commits, die Sie nicht gepusht haben |
| Letzter Commit, bereits gepusht | git revert HEAD | Fügt einen Commit hinzu, der den alten abbricht |
Ein schlechtes git commit --amend | git reset --soft HEAD@{1} | Führen Sie es aus, bevor HEAD sich erneut bewegt |
git reset --hard | git reset --hard HEAD@{1} | Nicht festgeschriebene Änderungen sind nicht im Reflog enthalten |
| Eine fertige Rebase | git reset --hard ORIG_HEAD | Beim nächsten Zurücksetzen, Zusammenführen oder Neubasieren wird ORIG_HEAD überschrieben |
| Eine lokale Zusammenführung | git reset --hard ORIG_HEAD | Nach dem Drücken git revert -m 1 <merge> verwenden |
| Ein gelöschter Zweig | git branch <name> <hash> | Der Hash befindet sich in der Löschnachricht oder im Reflog |
| Ein fallengelassener Vorrat | git stash apply <hash> | Der Hash befindet sich in der Drop-Nachricht |
| Ein Kraftschub | git push --force-with-lease origin <hash>:main | Warnen Sie alle, die dazwischen geraten sind |
Git Reflog erklärt: Das Sicherheitsnetz unter jedem Befehl
Das Reflog (Referenzprotokoll) ist ein privates Tagebuch darüber, worauf HEAD und Ihre Branchentipps hingewiesen haben. Bei jedem Commit, Checkout, Reset, Merge, Rebase, Amend und Pull wird eine Zeile hinzugefügt, und auch Remote-Tracking-Zweige wie origin/main erhalten eine. Es befindet sich nur in Ihrem lokalen .git-Ordner: Es wird nie gepusht und ein neuer Klon beginnt mit einem leeren.
git reflog
git reflog show main
git reflog --date=relativeEin typischer git reflog nach einem Rebase sieht so aus, neuester Eintrag zuerst:
6c55495 HEAD@{0}: rebase (finish): returning to refs/heads/feature-login
6c55495 HEAD@{1}: rebase (pick): Validate the email field
cb6e15e HEAD@{2}: rebase (pick): Add the login form
2c44bc3 HEAD@{3}: rebase (start): checkout main
595b83d HEAD@{4}: commit: Validate the email fieldLesen Sie bis zur neuesten Zeile vor dem Fehler: hier HEAD@{4}, der vor rebase (start) durchgeführte Commit. Verwenden Sie seinen Hash oder diesen Namen überall dort, wo Git einen Commit erwartet; main@{2.hours.ago} funktioniert auch. Einträge verfallen nach 90 Tagen bzw. nach 30 Tagen für Commits, die kein Zweig erreichen kann, und solange ein Eintrag vorhanden ist, behält git gc seinen Commit bei.
Stellen Sie einen verlorenen Commit mit Git Reflog in vier
Listen Sie das Reflog auf
Führen Sie
git reflogodergit reflog show <branch>für einen Zweig aus und notieren Sie sich den neuesten Eintrag vor dem Fehler.Überprüfen Sie den Commit
Führen Sie
git log --oneline -5 HEAD@{4}aus, um zu überprüfen, ob dies der Status ist, den Sie zurückerhalten möchten. Es ändert sich noch nichts.Speichern Sie es in einem Rettungszweig
Führen Sie
git branch rescue HEAD@{4}aus. Ihre Dateien bleiben unverändert und der Commit kann nicht mehr ablaufen.Bewegen Sie Ihren Zweig zurück
Übertragen oder speichern Sie alles, was Sie noch benötigen, führen Sie
git reset --hard rescuefür den defekten Zweig aus und löschen Sie dann den Helfer mitgit branch -d rescue.
Git macht den letzten Commit rückgängig: Soft-, Mixed- oder Hard-Reset
Wenn sich der Commit immer noch nur auf Ihrem Computer befindet, verschiebt git reset den Zweig um einen Commit nach hinten. Der Modus entscheidet, was mit seinen Änderungen passiert:
git reset --soft HEAD~1
git reset HEAD~1
git reset --hard HEAD~1--softhält die Änderungen bereit und kann erneut festgeschrieben werden: ideal zum Korrigieren der Nachricht oder zum Hinzufügen einer vergessenen Datei.--mixed, die Standardeinstellung, behält die Änderungen in Ihrem Arbeitsordner, ohne Bereitstellung, sodass Sie den Commit aufteilen können.--hardverwirft die Änderungen zusammen mit dem Commit, zusammen mit allen nicht festgeschriebenen Änderungen. Das Reflog behält das Commit für eine Weile bei, aber denken Sie zweimal darüber nach.
Wenn Sie es bereits gepusht haben, schreiben Sie es nicht neu: git revert HEAD zeichnet einen neuen Commit auf, der ihn abbricht. Die kostenlose Lektion Fehler nach dem Drücken wiederherstellen behandelt das Zurücksetzen und die anderen sicheren Wege zurück.
Machen Sie git commit --amend rückgängig
Ein Amend ersetzt den Commit durch einen neuen; Das Original bleibt im Reflog. Unmittelbar nach der Änderung setzt git reset --soft HEAD@{1} den Zweig wieder auf das Original und belässt das, was durch die Änderung hinzugefügt wurde, im Staging. Suchen Sie später die Zeile commit (amend) in git reflog und verwenden Sie den Eintrag darunter.
git reset --soft HEAD@{1}So machen Sie den Git-Reset --hard rückgängig
Ein Hard-Reset verschiebt den Zweig und überschreibt Ihre Dateien, aber die gelöschten Commits befinden sich immer noch in der Objektdatenbank von Git. Im Reflog wird die Verschiebung als reset: moving to HEAD~2 angezeigt, und die Zeile darunter zeigt an, wo Sie sich befanden. Wenn das Zurücksetzen Ihr letzter Befehl war, bringt dies alles zurück:
git reflog
git reset --hard HEAD@{1}git fsck --lost-foundSo machen Sie einen Git-Rebase rückgängig
Wenn das Rebase aufgrund eines Konflikts gestoppt wurde, gibt git rebase --abort den Zweig, den Index und Ihre Dateien an den Ort zurück, an dem sie sich befanden. Wenn es fertig ist, haben Sie zwei Möglichkeiten zurück. Git zeigt ORIG_HEAD auf den alten Tipp, wenn ein Rebase beginnt, also macht git reset --hard ORIG_HEAD es gleich danach rückgängig. Noch stabiler ist das eigene Reflog des Zweigs: Ein Rebase verschiebt den Zweig nur einmal, bei rebase (finish), sodass feature-login@{1} der Zweig genau so ist, wie er war. Wenn ein Rebase oder Cherry-Pick pausiert, wird in der Lektion Eine aktive Operation fortsetzen, überspringen oder abbrechen jeder Ausweg erläutert.
git rebase --abort
git reset --hard ORIG_HEAD
git reset --hard feature-login@{1}Wenn Sie den neu erstellten Zweig gepusht haben, ist zum Wiederherstellen ein Force-Push erforderlich (siehe unten). Um den Verlauf absichtlich neu zu schreiben, lesen Sie unseren Leitfaden zu interaktivem Rebase in einer Git-GUI.
Machen Sie eine Git-Zusammenführung rückgängig
Bei einer Zusammenführung bleibt auch der alte Tipp in ORIG_HEAD, sodass git reset --hard ORIG_HEAD einen Tipp rückgängig macht, den Sie nicht verschoben haben. Mitten im Konflikt holt Sie git merge --abort heraus, oder folgen Sie unserem Leitfaden zum Lösen von Git-Merge-Konflikten. Eine gepushte Zusammenführung wird mit git revert -m 1 <merge-commit> rückgängig gemacht; Wenn Sie diesen Zweig später erneut zusammenführen, werden diese Änderungen nicht wiederhergestellt, es sei denn, Sie machen die Wiederherstellung rückgängig.
git merge --abort
git reset --hard ORIG_HEAD
git revert -m 1 <merge-commit>Einen gelöschten Git-Zweig (und einen gelöschten Stash) wiederherstellen
Durch das Löschen eines Zweigs wird ein Name gelöscht, nicht die Commits. git branch -D gibt den Tipp aus, auf den der Zweig zeigte, und durch erneutes Erstellen des Zweigs aus diesem Hash wird er wiederhergestellt:
git branch feature-login 1a2b3c4
git reflog | grep "moving from feature-login"Diese Ausgabe verloren? Der Reflog von HEAD erinnert sich noch. Der zweite Befehl findet checkout: moving from feature-login to main; Der um eine Nummer höhere Eintrag (HEAD@{6}, wenn die Übereinstimmung HEAD@{5} ist) ist der letzte Commit des Zweigs. Wenn sich der Zweig noch auf der Fernbedienung befindet, ist git branch feature-login origin/feature-login schneller. Um einen Commit anstelle des gesamten Zweigs wiederherzustellen, wenden Sie ihn mit Cherry-Pick an.
Stellen Sie einen verlorenen Vorrat wieder her
git stash drop und git stash pop geben den Hash des entfernten Stashs aus und git stash apply <hash> bringt ihn zurück. Ohne den Hash schlägt die Dokumentation von Git diese Suche nach nicht erreichbaren Stash-Commits vor; Es findet Stashes, die mit der Standardmeldung „WIP am …“ gespeichert wurden:
git stash apply 9d668e5
git fsck --unreachable | grep commit | cut -d' ' -f3 | xargs git log --merges --no-walk --grep=WIP --onelineSo machen Sie einen Force-Push rückgängig
Ein Force-Push ersetzt den Remote-Zweig durch Ihren, sodass Commits, die sich nur auf dem Remote-Zweig befanden, herausfallen. Auch Ihr Remote-Tracking-Zweig führt ein Reflog durch: origin/main@{1} ist dort, wo sich der Remote-Zweig vor Ihrem Push befand, so wie Sie ihn zuletzt gesehen haben, und die Push-Ausgabe gab denselben Hash aus wie die erste Hälfte von old...new.
git reflog show origin/main
git push --force-with-lease origin 1a2b3c4:main--force-with-lease lehnt den Push ab, wenn sich die Fernbedienung seit Ihrem letzten Abruf bewegt hat, sodass Sie den Fix eines Teamkollegen nicht versehentlich überschreiben können. Commits, die Sie nie abgerufen haben, befanden sich nie auf Ihrem Computer; Wer sie gestoßen hat, kann sie noch einmal schieben. Dann erzählen Sie es jedem, der dazwischen gekommen ist. Das Video zur Wiederherstellung gepushter Fehler zeigt die gesamte Reparatur.
Mit einem Klick rückgängig machen in GitTree: ein Wiederherstellungs-Snapshot für 19 Arten von Vorgängen
Alles oben Genannte funktioniert auch in GitTree: Es führt Ihr installiertes Git (2.39 oder neuer) aus und sein integriertes Terminal öffnet Ihre eigene Shell unter dem Commit-Graph. Was es hinzufügt: GitTree speichert einen Wiederherstellungs-Snapshot unter refs/ogt/trash für 19 Arten von Vorgängen und speichert alles, was ein destruktiver Schritt entfernen würde, bevor er ausgeführt wird, und die Schaltfläche „Rückgängig“ in der Symbolleiste macht den letzten Schritt rückgängig.
Das Rückgängigmachen umfasst Festschreibungen und Änderungen, Auschecken, Zurücksetzen, Rebases (auch interaktive), verworfene Dateien, Teile und Zeilen, gelöschte Zweige und Tags, bereinigte nicht verfolgte Dateien und mehr. Bei einem Hard-Reset-Lauf von GitTree enthält der Snapshot auch Ihre nicht festgeschriebenen Änderungen, die einfach mit git reset --hard nicht wiederhergestellt werden können.

Zwei der 19 werden beibehalten und nicht umgekehrt. Ein Force-Push verändert eine Fernbedienung, die nur durch einen weiteren Push wieder zurückgeändert werden kann, also behält GitTree die Spitze, die es ersetzt hat, und überlässt diesen Push Ihnen (es erzwingt immer einen Force-Push mit --force-with-lease). Von einem gelöschten Stash wird ein Snapshot erstellt, aber durch „Rückgängig“ wird er noch nicht wiederhergestellt. GitTree lehnt auch ein Rückgängigmachen ab, das spätere Arbeiten überschreiben würde, und gibt den Grund dafür an. Ein normaler Push kann über die App nicht rückgängig gemacht werden; stattdessen zurücksetzen.

So machen Sie einen Reset, ein Rebase oder einen gelöschten Zweig in GitTree rückgängig
Arbeiten Sie wie gewohnt
Setzen Sie einen Zweig wie gewohnt zurück, rebasieren ihn, verwerfen oder löschen Sie ihn. GitTree erstellt zuerst den Snapshot; Der Hard-Reset-Dialog sagt es so.
Klicken Sie auf „Rückgängig“.
Klicken Sie in der Symbolleiste auf „Rückgängig“ oder führen Sie es über die Befehlspalette aus (Strg/⌘+Umschalt+P). Der Tooltip benennt den Schritt, z. B. „Rückgängig machen: Branch-Feature-Login löschen“; Ein Schritt, der nicht rückgängig gemacht werden kann, zeigt, warum.
Gehen Sie mit dem Reflog weiter zurück
Rückgängig machen deckt ab, was GitTree selbst ausgeführt hat. Führen Sie für einen in einem Terminal eingegebenen Befehl „View Reflog…“ aus der Palette aus, wählen Sie einen Eintrag aus und wählen Sie „Als Zweig wiederherstellen“.
Überprüfen Sie die Grafik, bevor Sie drücken
Das Commit-Diagramm zeigt den Zweig wieder dort an, wo er war, sodass Sie das Ergebnis bestätigen können, bevor etwas Ihren Computer verlässt.
Gewohnheiten, die dafür sorgen, dass jeder Git-Fehler reversibel bleibt
- Frühes Commit, sogar chaotisch. Nur Commit-Arbeit erreicht das Reflog; Räumen Sie es später mit einem interaktiven Rebase auf.
- Verzweigung vor riskanten Änderungen.
git branch backup/before-rebasekostet nichts und läuft nie ab. - Verwenden Sie niemals ein einfaches `--force`.
--force-with-leaseüberschreibt keine Commits, die Sie nicht gesehen haben. - Geteilten Verlauf zurücksetzen, privaten Verlauf zurücksetzen. Sobald andere einen Commit durchgeführt haben, setzen Sie ihn zurück.
- Git auf dem neuesten Stand halten. GitTree benötigt Git 2.39 oder neuer und Ubuntu 22.04 wird mit Version 2.34 ausgeliefert; siehe So aktualisieren Sie Git unter Ubuntu.
Sie entscheiden sich immer noch zwischen Tippen und Klicken? Lesen Sie Git GUI vs. Befehlszeile oder beginnen Sie mit Git für Anfänger, mit einer GUI.
GitTree verfügt über einen kostenlosen Plan, der alle Git-Funktionen abdeckt, einschließlich privater Repositories, auf macOS 13 oder höher, Windows 10 und 11 (x64) und 64-Bit Linux (x86_64: Ubuntu 22.04+, Debian 12+), und Nour, der KI-Assistent, wird mit GitTree Pro geliefert (siehe Preise). Zur Anmeldung sind Git 2.39 oder neuer und ein GitTree-Konto erforderlich. Laden Sie es von der Download-Seite herunter oder sehen Sie, wie es unter Linux ausgeführt wird.
Häufig gestellte Fragen
Wie mache ich git reset --hard rückgängig?
Führen Sie git reflog aus und suchen Sie die Zeile direkt unter reset: moving to …; dort war deine Filiale. Wenn das Zurücksetzen Ihr letzter Befehl war, bringt git reset --hard HEAD@{1} die gelöschten Commits zurück. Änderungen, die Sie nie festgeschrieben haben, sind nicht im Reflog enthalten, sodass Git sie nicht wiederherstellen kann. Wenn Sie den Hard-Reset in GitTree ausgeführt haben, werden sie durch „Rückgängig“ aus dem zuerst erstellten Snapshot wiederhergestellt.
Wie mache ich das letzte Commit rückgängig, behalte aber meine Änderungen bei?
Führen Sie git reset --soft HEAD~1 aus, um die Änderungen im Staging-Modus beizubehalten, oder git reset HEAD~1, um sie im nicht bereitgestellten Zustand in Ihrem Arbeitsordner zu belassen. Beide schreiben nur Ihren lokalen Zweig um, also verwenden Sie sie für Commits, die Sie nicht gepusht haben. Führen Sie für einen gepushten Commit git revert HEAD aus, wodurch ein Commit hinzugefügt wird, der den Commit abbricht.
Wie mache ich einen Git-Rebase rückgängig, nachdem er abgeschlossen ist?
Unmittelbar nach dem Rebase setzt git reset --hard ORIG_HEAD den Zweig auf seinen alten Spitzenwert zurück. Wenn Sie seitdem andere Befehle ausgeführt haben, verwenden Sie git reset --hard <branch>@{1}: Ein Rebase verschiebt den Zweig nur einmal, wenn er fertig ist. Wenn Sie den neu erstellten Zweig gepusht haben, pushen Sie den wiederhergestellten Zweig mit --force-with-lease.
Wie lange bewahrt Git Reflog verlorene Commits auf?
Ein verlorener Commit, den kein Branch mehr erreicht, behält seinen Reflog-Eintrag standardmäßig 30 Tage lang; Einträge für Commits, die sich noch in einem Zweig befinden, dauern 90 Tage. Solange ein Eintrag vorhanden ist, behält die Garbage Collection ihren Commit bei. Um einen Commit auf unbestimmte Zeit aufzubewahren, fügen Sie ihm einen Zweig oder ein Tag hinzu, zum Beispiel git branch rescue <hash>, da Git niemals Commits löscht, auf die ein Zweig zeigt.
Kann ich nicht festgeschriebene Änderungen nach git reset --hard wiederherstellen?
Normalerweise nicht mit Git allein. Das Reflog zeichnet Commits und keine Bearbeitungen in Ihrem Arbeitsordner auf. Überprüfen Sie daher den lokalen Verlauf Ihres Editors. Bereitgestellte Dateien bleiben möglicherweise als baumelnde Objekte erhalten, die git fsck --lost-found ohne Dateinamen in .git/lost-found/other/ schreibt. GitTree erstellt einen Snapshot nicht festgeschriebener Änderungen vor dem eigenen Hard-Reset.
Wie mache ich einen Force-Push rückgängig?
Suchen Sie den Remote-Tipp, den Sie ersetzt haben: git reflog show origin/main listet ihn als origin/main@{1} auf und die Push-Ausgabe zeigte ihn als ersten Hash in old...new. Führen Sie dann git push --force-with-lease origin <hash>:main aus. Wenn der Push Commits überschrieben hat, die Sie nie abgerufen haben, bitten Sie denjenigen, der sie gepusht hat, sie erneut zu pushen.
Kann GitTree einen Git-Push rückgängig machen?
Nein. Ein normaler Push kann von GitTree aus nicht rückgängig gemacht werden; Setzen Sie stattdessen das Commit zurück. Bei einem Force-Push behält GitTree den Remote-Tipp, den es ersetzt hat, in einem Wiederherstellungs-Snapshot bei, sodass nichts verloren geht, aber das Wiederherstellen des Remote-Tipps erfordert einen weiteren Push. „Rückgängig“ umfasst lokale Vorgänge wie Commits, Resets, Rebases, Checkouts und Zweiglöschungen.
Wird der Git-Relog mit meinem Team geteilt?
Nein. Das Reflog befindet sich nur in Ihrem lokalen .git-Ordner. Es wird nie gepusht, das Abrufen bringt nicht das eines anderen und ein neuer Klon beginnt mit einem leeren. Der verlorene Commit eines Teamkollegen kann also nur auf seinem Computer wiederhergestellt werden, und Ihr Reflog behält Ihre Commits, auch wenn jemand den Remote-Zweig überschreibt.
Quellen
Behauptungen zu anderen Produkten wurden anhand der offiziellen Seiten auf 23. Oktober 2026 überprüft. Preise und Ausstattung ändern sich; Die Seiten der Anbieter sind die Quelle der Wahrheit.