Git Reset mit dem Flag --Hard rückgängig machen

Ashok Chapagai 11 Dezember 2023
  1. Es wurden festgeschriebene Änderungen vorgenommen, die jetzt aufgrund von git reset --hard verschwunden sind
  2. Änderungen wurden inszeniert, aber nicht festgeschrieben
  3. Änderungen wurden weder festgeschrieben noch inszeniert
Git Reset mit dem Flag --Hard rückgängig machen

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 werden verworfen.

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.

Ashok Chapagai avatar Ashok Chapagai avatar

Ashok is an avid learner and senior software engineer with a keen interest in cyber security. He loves articulating his experience with words to wider audience.

LinkedIn GitHub

Verwandter Artikel - Git Reset