Einführung | Aufgrund falscher Git-Befehle hat er die im Stash gespeicherten Änderungen gelöscht. Nach dieser traurigen Episode haben wir versucht, einen Weg zu finden, die von ihm geleistete Arbeit wiederherzustellen, und wir haben es geschafft! Zunächst eine Warnung: Wenn Sie eine große Funktion implementieren, teilen Sie sie in kleine Teile auf und übernehmen Sie diese regelmäßig. Lange Zeit unverbindlich zu arbeiten ist keine gute Angewohnheit. Lassen Sie uns zeigen, wie Sie versehentlich gelöschte Änderungen aus dem Stash wiederherstellen. |
In dem Repository, das ich als Beispiel verwendet habe, gibt es nur eine Quelldatei „main.c“, wie unten gezeigt:
Es gibt nur einen Commit, den „Initial Commit“:
Die erste Version dieser Datei ist:
Ich werde etwas Code in die Datei schreiben. Für dieses Beispiel muss ich keine großen Änderungen vornehmen, ich brauche nur etwas zum Verstecken, also fügen wir einfach eine Zeile hinzu. Die Ausgabe von „git diff“ lautet wie folgt:
Angenommen, ich möchte einige neue Änderungen aus dem Remote-Repository abrufen, ohne meine eigenen Änderungen noch zu übernehmen. Also beschloss ich, es zuerst zu speichern, darauf zu warten, dass die Änderungen im Remote-Warehouse übernommen wurden, und dann meine Änderungen im Hauptzweig rückgängig zu machen. Ich habe den folgenden Befehl ausgeführt, um meine Änderungen in den Stash zu verschieben:
git stash
Verwenden Sie den Befehl „git stash list“, um den Stash anzuzeigen. Meine Änderungen können Sie hier sehen:
Mein Code befindet sich bereits an einem sicheren Ort und der Hauptzweig ist derzeit sauber (überprüfen Sie dies mit dem Befehl git status). Jetzt muss ich nur noch die Änderungen aus dem Remote-Repository abrufen und meine Änderungen im Master-Zweig rückgängig machen, was ich auch tun sollte.
Aber ich habe den Befehl falsch ausgeführt:
git stash drop
Der Stash wurde entfernt, anstatt den folgenden Befehl auszuführen:
stash pop
Dieser Befehl wendet den Stash an, bevor er vom Stapel entfernt wird. Wenn ich den Befehl git stash list
erneut ausführe, kann ich sehen, dass ich die Änderungen gelöscht habe, ohne sie vom Stapel auf den Hauptzweig zurückzusetzen. OMG! Was macht man als nächstes?
Die gute Nachricht ist: Git hat das Objekt mit meinen Änderungen nicht gelöscht, sondern nur den Verweis darauf entfernt. Um dies zu demonstrieren, verwende ich den Befehl git fsck, der die Verbindung und Gültigkeit der Objekte in der Datenbank überprüft. Dies ist die Ausgabe, nachdem ich git fsck im Repository ausgeführt habe:
Ich habe git-fsck dank des Parameters --unreachable dazu gebracht, alle nicht erreichbaren Objekte anzuzeigen. Wie Sie sehen können, zeigt es, dass es keine unzugänglichen Objekte gibt. Und als ich meine Änderungen aus dem Stash löschte und denselben Befehl erneut ausführte, erhielt ich eine andere Ausgabe:
Es gibt jetzt drei unzugängliche Objekte. Welches ist also mein Wechselgeld? Eigentlich weiß ich es nicht. Ich muss jedes Objekt durchsuchen, indem ich den Befehl git show ausführe.
Das ist es! Die ID-Nummer 95ccbd927ad4cd413ee2a28014c81454f4ede82c entspricht meiner Änderung. Nachdem ich die fehlenden Änderungen gefunden habe, kann ich sie wiederherstellen. Eine Möglichkeit besteht darin, diese ID zu nehmen und in einen neuen Zweig zu legen oder sie direkt festzuschreiben. Sobald Sie die ID-Nummer Ihres Änderungsobjekts haben, können Sie entscheiden, wie Sie die Änderung am besten an den Hauptzweig zurückgeben können. In diesem Beispiel habe ich Git Stash verwendet, um die Änderungen an meinem Hauptzweig rückgängig zu machen.
git stash apply 95ccbd927ad4cd413ee2a28014c81454f4ede82c
Eine weitere wichtige Sache, die Sie beachten sollten, ist, dass Git sein Garbage Collection-Programm (GC) regelmäßig ausführt. Nach der Ausführung können Sie mit git fsck keine unzugänglichen Objekte mehr sehen.
Das obige ist der detaillierte Inhalt vonBringen Sie Ihnen bei, Daten in Git-Stash-Daten abzurufen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!