So stellen Sie zurückgesetzte Commits in einem Git-Repository wieder her

Wenn Sie gerade einen Git-Commit zurückgesetzt und versehentlich gelöscht haben eine Datei oder ein Stück Code deswegen, machen Sie sich keine Sorgen. Git verfolgt alles, und die Wiederherstellung der wiederhergestellten Datei ist sowohl über die Befehlszeile als auch über die meisten GUI-Git-Clients einfach.

Don’t Panik

Glücklicherweise verfolgt Git alles, sogar rückgängig gemachte Commits. Du hast noch nichts gelöscht.

Möglicherweise sind Sie beim Versuch, “Löschen” ein Git-Commit. Sie können Commits jedoch nicht wirklich löschen, wenn Sie sie einmal erstellt haben. Sie können nur auf einen vorherigen Commit zurücksetzen und die lokalen Änderungen ignorieren oder die Änderungen rückgängig machen.

In meinem Fall mit diesem Problem hatte ich zum Beispiel gerade mein Git-Repository initialisiert und versehentlich alles ohne Schreiben bereitgestellt meine .gitignore Datei, die ./bin/ Ordner und anderen Müll, den ich nicht wollte, festgeschrieben hat. Also, ohne darüber nachzudenken, klickte ich auf “Zurückkehren” in meinem Git-Client und sah entsetzt zu, wie mein gesamtes Verzeichnis gelöscht wurde. Hoppla.

Das Problem ist, dass “Zurückkehren” Ein Commit ist nicht dasselbe wie das Unstaging der Änderungen und kann unerwartete Auswirkungen auf Ihre lokalen Dateien haben, die nur über Git behoben werden können. Dies sieht nach einem ernsthaften Problem aus, bis Sie feststellen, dass alle Daten noch im .git/ Ordner Ihres Repositorys gespeichert sind, sodass sie wiederhergestellt werden können.

Werbung

Es hilft nicht, dass es seltsam benannt ist, und die eigentliche Möglichkeit, einen unerwünschten Commit zu entfernen, besteht darin, einen “Soft Reset” zurück zum letzten Commit hinter dem HEAD. Wenn Sie also das nächste Mal einen Commit rückgängig machen möchten (um Ihre Änderungen zu bearbeiten und erneut festzusetzen), verwenden Sie den folgenden Befehl:

git reset HEAD~1

Zur Klarstellung—dies ist kein “hart” reset, wodurch auch alle Ihre lokalen Änderungen entfernt werden.

Reverted Commits beheben

Der Fix ist ziemlich einfach. Immer wenn Sie einen “git revert” Git macht einen neuen Commit mit entgegengesetzten Änderungen an dem Commit, der rückgängig gemacht wird. Wenn Sie eine Datei erstellt haben, wird diese Datei entfernt und der Commit spiegelt dies wider.

Die Lösung besteht darin, diesen rückgängig machenden Commit anzuwenden und ihn dann zurückzusetzen, wodurch die Änderungen rückgängig gemacht werden. Dies funktioniert auch dann, wenn sich der Revert-Commit nicht im HEAD Ihres Repositorys befindet; Andernfalls würde auch ein Hard-Reset funktionieren und Ihr Repo von peinlichen “Revert” und “Rückgängig machen” Commits, über die Ihre Kollegen lachen werden.

Um den Hash für den Commit zu finden, können Sie git log ausführen:

Kopieren Sie diesen Hash und führen Sie dann git revert aus:

git revert 62ff517cc7c358eaf0bffdebbbe1b38dea92ba0f

Dies sollte das Repository reparieren, obwohl Sie möglicherweise die may kehren Sie manuell zurück, wenn der automatische Commit fehlgeschlagen ist.

Werbung

Bei den meisten GUI-Git-Clients ist der Prozess extrem einfach. Klicken Sie einfach auf “Zurückkehren” beim Commit.

Revertieren ohne Spur

Wenn Sie sich am HEAD Ihres Commit-Baums befinden und dies tun möchten, ohne neue Commits zu machen, und Sie haben&#8217 ;Wenn die Änderung noch nicht durchgeführt wurde, können Sie Ihren lokalen Branch hart auf den alten Commit zurücksetzen.

git reset –hard HEAD^

Der Grund, warum dies ein Hard-Reset sein muss, ist, dass ein Soft-Reset immer noch einschließen würde die nicht inszenierten Änderungen aus dem Zurücksetzen. Sie möchten ohne die lokalen Änderungen zurücksetzen.

Sie können die lokalen Änderungen auch manuell zurücksetzen und verwerfen.


Posted

in

by

Tags: