In diesem Abschnitt werden wir den Prozess durchgehen, wie man eine neue Datei erstellt und drei Commits macht. Sie werden dann sehen, wie Sie entweder zum letzten Commit oder zu einem beliebigen anderen Commit zurückkehren können, indem Sie die Commit-ID verwenden.
Um loszulegen, habe ich eine Datei namens tasks.txt erstellt. Die Datei enthält Folgendes:
- code.
- Practice.
- Build.
Als nächstes werden wir diese Datei initialisieren, hinzufügen und committen:
git init
git add tasks.txt
git commit -m "erster Commit"
Wir haben den ersten Commit gemacht. Wir wiederholen den oben genannten Prozess noch zwei weitere Male, fügen jedoch vor jedem Commit eine zusätzliche Zeile Text zur Datei hinzu. Das heißt:
- code.
- Practice.
- Build.
- Research.
git add tasks.txt git commit -m "zweiter Commit"
Zuletzt, für den dritten Commit:
- code.
- Practice.
- Build.
- Research.
- Write.
git add tasks.txt git commit -m "dritter Commit"
Jetzt haben wir drei Commits. Um zu einem früheren Commit zurückzukehren, müssen Sie zuerst die Commit-ID erhalten. Führen Sie dazu den folgenden Befehl aus:
git log --oneline
In meinem Terminal sehe ich Folgendes:
5914db0 (HEAD -> master) third commit
882ad02 second commit
89f6c3d first commit
Wie Sie oben sehen können, listet dieser Befehl alle Ihre Commits zusammen mit ihren IDs auf. Um zum zweiten Commit zurückzukehren, geben Sie den git reset Befehl gefolgt von der Commit-ID ein. Das heißt:
git reset 5914db0
Wenn Sie bis zu diesem Punkt gefolgt sind, werden Sie keinen Unterschied in der Datei feststellen (später werden Sie sehen, wie Sie sowohl den Commit als auch alle Änderungen an der Datei rückgängig machen können). Die Datei sieht immer noch so aus:
- code.
- Practice.
- Build.
- Research.
- Write.
Aber wenn wir den Befehl git log --oneline
ausführen, wird der dritte Commit nicht im Commit-Protokoll angezeigt:
882ad02 second commit
89f6c3d first commit
Wir sind erfolgreich zu einem früheren Commit zurückgekehrt.
Wenn Sie einen Commit und alle Änderungen, die nach diesem Commit gemacht wurden, rückgängig machen möchten, fügen Sie den --hard
-Flag zu Ihrem git reset Befehl hinzu. Testen wir dies, indem wir zum ersten Commit zurückkehren:
git reset 89f6c3d --hard
So sieht die Textdatei jetzt aus:
- code.
- Practice.
- Build.
Wir sind zurück zum ursprünglichen Zustand der Datei zum Zeitpunkt des spezifizierten Commits. Alle Änderungen, die nach diesem Commit an der Datei vorgenommen wurden, wurden gelöscht. Wenn wir das Commit-Protokoll überprüfen, haben wir nur den ersten Commit.
Obwohl dies cool erscheint, sollten Sie vorsichtig sein, wenn Sie diesen Befehl verwenden, insbesondere wenn Sie mit einem Team zusammenarbeiten. Wenn Sie einen Commit rückgängig machen und alle Dateiänderungen löschen, die danach vorgenommen wurden, können Sie wichtige Änderungen an Ihrem Code durch Sie und andere Teammitglieder verlieren. Dies ändert auch die Commit-Historie Ihres Projekts. Glücklicherweise gibt es eine Möglichkeit, den Zustand eines gelöschten Commits wiederherzustellen. Weitere Informationen dazu finden Sie hier.
Wie man mit dem git revert Befehl zu einem früheren Commit zurückkehrt
Ich habe das Projekt bereits initialisiert und drei Commits gemacht, wie wir es im letzten Abschnitt getan haben. So sieht das Commit-Protokoll aus:
882ad02 (HEAD -> master) third commit
5914db0 second commit
89f6c3d first commit
Um zum vorherigen Commit zurückzukehren, führen Sie den git revert Befehl zusammen mit der Commit-ID des aktuellen Commits aus. In unserem Fall verwenden wir die ID des dritten Commits:
git revert 882ad02
Der obige Befehl wird den aktuellen Commit rückgängig machen und die Datei auf den Zustand des vorherigen Commits zurücksetzen. Wenn Sie das Commit-Protokoll überprüfen, haben Sie etwas wie das hier:
bd6a7d5 (HEAD -> master) Revert "third commit"
882ad02 third commit
5914db0 second commit
89f6c3d first commit
Im Gegensatz zum git reset Befehl erstellt der git revert Befehl einen neuen Commit für die rückgängig gemachten Änderungen. Das Commit, von dem wir uns zurückgesetzt haben, wird nicht gelöscht. Wie Sie sehen können, sind git reset und git revert nicht dasselbe. git reset macht Änderungen bis zum Zustand der spezifizierten Commit-ID rückgängig. Wenn Sie zum Beispiel zur zweiten Commit-ID zurückkehren, werden Änderungen rückgängig gemacht und der Zustand der Datei entspricht dem Zustand des zweiten Commits. git revert macht Änderungen bis zum Zustand vor der spezifizierten Commit-ID rückgängig. Wenn Sie zum Beispiel zur zweiten Commit-ID zurückkehren, werden Änderungen rückgängig gemacht und der Zustand der Datei entspricht dem Zustand des vorherigen Commits - dem ersten Commit.
Die obigen Erläuterungen mögen verwirrend erscheinen. Der beste Weg, es zu verstehen, besteht darin, es selbst auszuprobieren.
Wann man git reset und git revert verwendet
Sie sollten git reset verwenden, wenn Sie an einem lokalen Repository mit Änderungen arbeiten, die noch nicht remote gepusht wurden. Dies liegt daran, dass das Ausführen dieses Befehls nach dem Abrufen von Änderungen aus dem Remote-Repository die Commit-Historie des Projekts ändert und zu Merge-Konflikten für alle führt, die an dem Projekt arbeiten.
git reset ist eine gute Option, wenn Sie feststellen, dass die Änderungen, die an einem bestimmten lokalen Branch vorgenommen werden, woanders sein sollten. Sie können zurücksetzen und zum gewünschten Branch wechseln, ohne Ihre Dateiänderungen zu verlieren.
git revert ist eine gute Option, um Änderungen rückgängig zu machen, die in ein entferntes Repository gepusht wurden. Da dieser Befehl einen neuen Commit erstellt, können Sie Ihre Fehler sicher beheben, ohne die Commit-Historie für alle anderen umzustrukturieren.
Zusammenfassung In diesem Artikel haben wir darüber gesprochen, wie man in Git zu früheren Commits zurückkehrt. Wir haben zwei Hauptbefehle besprochen, die zeigen, wie man Git-Änderungen rückgängig macht - die git reset und git revert Befehle.
Wir haben auch gesehen, wie beide Befehle anhand praktischer Beispiele funktionieren.
Viel Spaß beim Coden!