Git Reset mit dem Flag --Hard rückgängig machen
-
Es wurden festgeschriebene Änderungen vorgenommen, die jetzt aufgrund von
git reset --hard
verschwunden sind - Änderungen wurden inszeniert, aber nicht festgeschrieben
- Änderungen wurden weder festgeschrieben noch inszeniert
Manchmal möchten Sie vielleicht die Änderungen bis zu einem bestimmten Commit zurücksetzen. Angenommen, Sie entscheiden sich für die Methode git reset --hard <commit id>
, um die Änderungen zurückzusetzen, haben aber vergessen, dass das Flag --hard
nicht festgeschriebene Änderungen auf dem lokalen System verwirft, und erkennen den Fehler später. In diesem Fall gibt es verschiedene Szenarien, in denen Sie die Änderungen wiederherstellen können.
In diesem Artikel finden Sie Möglichkeiten, die Änderungen in Abhängigkeit von verschiedenen Szenarien rückgängig zu machen.
Es wurden festgeschriebene Änderungen vorgenommen, die jetzt aufgrund von git reset --hard
verschwunden sind
Diese Situation ist eine der am häufigsten auftretenden Situationen und die einfachste, um Änderungen wiederherzustellen. Wenn Sie git reset --hard
ausführen und Änderungen am Repository vorgenommen haben, führen Sie git reflog <branchname
aus, um alle Änderungen aufzulisten, die in diesem Zweig vorgenommen wurden, einschließlich Zurücksetzungen. Die Ausgabe könnte etwa so aussehen,
116daf4 dev@{0}: reset: moving to HEAD~
adf3a51 dev@{1}: commit: changed authentication method
4f7fa8c dev@{2}: commit: updated readme
5eb37ca dev@{3}: commit (initial): Initial Commit
Jetzt können wir sehen, dass das erste Protokoll zeigt, dass wir den Zweig dev
zurückgesetzt haben. Um nun die Änderungen von Commit dev@{1}
oder adf3a51
wiederherzustellen, können Sie den Befehl ausführen:
git reset --hard adf3a51
Es macht die Änderungen bis zu diesem Commit rückgängig.
Änderungen wurden inszeniert, aber nicht festgeschrieben
Das Wiederherstellen der bereitgestellten, aber nicht festgeschriebenen Änderungen ist etwas schwieriger als die obige Methode, aber es ist immer noch machbar. Erstens können Sie mit dem Befehl git fsck --lost-found
alle Commit-Hashes auflisten, die vor der Verwendung des Befehls git reset --hard
baumelten. Sie können git show <commit_hash>
verwenden, um zu sehen, was der Commit-Hash enthält. Nachdem Sie nun den baumelnden Commit-Hash haben, den Sie zurücksetzen wollten, verwenden Sie den Befehl git reset --hard <commit_hash
erneut mit dem abgerufenen Commit-Hash, um zum gewünschten Commit zu gelangen.
Änderungen wurden weder festgeschrieben noch inszeniert
Wenn Sie immer noch lesen und auf diese Methode stoßen, gibt es möglicherweise keine Möglichkeit, den Befehl git reset --hard
rückgängig zu machen, da git keine Änderungen speichert, die Sie nicht hinzufügen oder festschreiben. Wenn Sie sich auf die Dokumentation für git reset
und den Abschnitt --hard
beziehen, heißt es, dass der Index und der Arbeitsbaum zurückgesetzt werden. Alle Änderungen an den nachverfolgten Dateien in der Arbeitsstruktur seit
Da es nicht möglich scheint, die Daten aus diesem Zustand ohne großen Aufwand wiederherzustellen, ist es klüger, diese Situation nicht entstehen zu lassen und den Befehl zu kennen, den Sie verwenden wollten, und auch seine Flags.
Verwandter Artikel - Git Reset
- Eine Git-Zusammenführung mit Konflikten rückgängig machen
- Machen Sie den Development-Branch mit dem Master-Branch identisch
- Unterschied zwischen den Git-Befehlen `Reset`, `Revert` und `Checkout`.
- Unterschied zwischen Git RM --Cached und Git Reset File
- Verschiedene Methoden zum Entfernen lokaler Git-Änderungen
- Änderungen in Git rückgängig machen