Erstens: Es ist immer wichtig zu wissen, dass git reset --hard
ist ein potenziell gefährlicher Befehl, da er alle nicht übertragenen Änderungen verwirft. Zur Sicherheit sollten Sie immer überprüfen, ob die Ausgabe von git status
sauber (d.h. leer) ist, bevor Sie es benutzen.
Zu Beginn sagen Sie Folgendes:
Ich weiß also, dass Git die Änderungen, die ich an meiner Anwendung vornehme, verfolgt und so lange speichert, bis ich die Änderungen übertrage, aber hier hakt es:
Das ist nicht korrekt. Git zeichnet den Zustand der Dateien nur auf, wenn Sie sie bereitstellen (mit git add
) oder wenn Sie eine Übertragung erstellen. Sobald Sie einen Commit erstellt haben, der Ihre Projektdateien in einen bestimmten Zustand versetzt, sind sie sehr sicher, aber bis dahin "verfolgt" Git nicht wirklich Änderungen an Ihren Dateien. (zum Beispiel, selbst wenn Sie git add
um eine neue Version der Datei bereitzustellen, die die zuvor bereitgestellte Version dieser Datei im Bereitstellungsbereich überschreibt).
In Ihrer Frage fragen Sie dann Folgendes:
Wenn ich zu einer früheren Übergabe zurückkehren möchte, verwende ich: git reset --hard HEAD Und git gibt zurück: HEAD ist jetzt bei 820f417 micro
Wie kann ich dann die Dateien auf meiner Festplatte auf die vorherige Übertragung zurücksetzen?
Wenn Sie das tun git reset --hard <SOME-COMMIT>
dann wird Git:
- Machen Sie Ihren aktuellen Zweig (normalerweise
master
) zurück zum Punkt bei <SOME-COMMIT>
.
- Stellen Sie dann die Dateien in Ihrem Arbeitsbaum und im Index ("staging area") auf die gleichen Versionen ein wie die in
<SOME-COMMIT>
.
HEAD
verweist auf Ihren aktuellen Zweig (oder die aktuelle Übertragung), so dass alles, was git reset --hard HEAD
ist es, alle nicht bestätigten Änderungen zu verwerfen.
Nehmen wir also an, der gute Commit, zu dem Sie zurückkehren wollen, ist f414f31
. (Sie finden sie über git log
oder einen beliebigen Verlaufsbrowser). Je nachdem, was Sie genau tun möchten, haben Sie dann verschiedene Möglichkeiten:
- Ändern Sie Ihren aktuellen Zweig so, dass er stattdessen auf den älteren Commit verweist. Das können Sie mit
git reset --hard f414f31
. Dies bedeutet jedoch, dass Sie die Geschichte Ihrer Verzweigung neu schreiben, weshalb Sie dies vermeiden sollten, wenn Sie diese Verzweigung mit jemandem geteilt haben. Außerdem werden die Commits, die Sie nach f414f31
wird nicht mehr in der Historie Ihrer master
Zweigstelle.
-
Erstellen Sie eine neue Übergabe, die genau denselben Zustand des Projekts repräsentiert wie f414f31
sondern fügt dies einfach der Historie hinzu, so dass Sie keine Historie verlieren. Sie können dies mit den Schritten tun, die in diese Antwort - etwas wie:
git reset --hard f414f31
git reset --soft HEAD@{1}
git commit -m "Reverting to the state of the project at f414f31"