Git Commit rückgängig machen, ohne Änderungen zu verlieren

GitGitBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einleitung

Git ist ein leistungsstarkes Versionskontrollsystem, das es Entwicklern ermöglicht, ihren Codebestand effektiv zu verwalten. Eine häufige Aufgabe ist das Rückgängigmachen von Änderungen. Während Befehle wie git reset den Commit-Verlauf ändern können, bietet git revert eine sicherere, nicht-destruktive Methode, um Commits rückgängig zu machen, insbesondere in kollaborativen Projekten. Dieses Lab führt Sie durch die Verwendung von git revert, um einen Commit rückgängig zu machen, und wie Sie dessen Optionen nutzen können, um Ihre Änderungen für weitere Modifikationen zu erhalten.

Überprüfung des Commit-Verlaufs

Bevor wir Änderungen vornehmen, ist es wichtig, den aktuellen Zustand unseres Projekts zu verstehen. Die Laborumgebung wurde mit einem Git-Repository vorkonfiguriert, das eine Datei namens story.txt und einige Commits enthält. Lassen Sie uns den Commit-Verlauf überprüfen.

Verwenden Sie zunächst den Befehl git log mit der Option --oneline, um eine kompakte Ansicht des Commit-Verlaufs zu erhalten. Dieser Befehl listet jeden Commit in einer einzigen Zeile auf und zeigt den Commit-Hash und die Commit-Nachricht an.

git log --oneline

Sie sollten eine Ausgabe ähnlich dieser sehen. Beachten Sie, dass Ihre Commit-Hashes unterschiedlich sein werden:

c7a3e69 (HEAD -> master) Add a second, unwanted line
a9b2d5f Add the first line to the story
f3e1c8a Initial commit: Add story.txt

Dieser Log zeigt drei Commits. Der aktuellste Commit, oben, hat die Nachricht "Add a second, unwanted line". Nehmen wir an, dieser Commit hat einen Fehler eingeführt, den wir rückgängig machen müssen.

Lassen Sie uns auch den aktuellen Inhalt der Datei story.txt anzeigen:

cat story.txt

Die Ausgabe wird sein:

Once upon a time, in a land of code.
The hero of our story was a brave developer.
Suddenly, a wild bug appeared!

Unser Ziel ist es, die letzte Zeile, "Suddenly, a wild bug appeared!", zu entfernen, die in unserem letzten Commit hinzugefügt wurde.

git revert für ein sicheres Rückgängigmachen verwenden

Der Befehl git revert wird verwendet, um einen neuen Commit zu erstellen, der die Änderungen eines vorherigen Commits rückgängig macht. Dies ist eine sichere Methode, um Änderungen rückgängig zu machen, da sie den Verlauf des Projekts nicht verändert.

Kopieren Sie zuerst den Commit-Hash des Commits, den Sie rückgängig machen möchten. Aus der Ausgabe im vorherigen Schritt ist dies der Commit mit der Nachricht "Add a second, unwanted line".

Führen Sie nun den Befehl git revert mit diesem Hash aus.

Bitte ersetzen Sie <your-commit-hash> durch den tatsächlichen Hash aus Ihrem Terminal.

git revert <your-commit-hash>

Nachdem Sie diesen Befehl ausgeführt haben, öffnet Git Ihren Standard-Texteditor (nano), damit Sie die Commit-Nachricht für diesen neuen Revert-Commit bearbeiten können. Die Standardnachricht ist normalerweise ausreichend.

Um nano zu speichern und zu beenden:

  1. Drücken Sie Strg+O (Write Out) und dann Enter, um den Dateinamen zu bestätigen.
  2. Drücken Sie Strg+X, um zu beenden.

Überprüfen wir nun erneut den Commit-Verlauf:

git log --oneline

Sie werden einen neuen Commit oben sehen:

e0d5f1b (HEAD -> master) Revert "Add a second, unwanted line"
c7a3e69 Add a second, unwanted line
a9b2d5f Add the first line to the story
f3e1c8a Initial commit: Add story.txt

Beachten Sie, dass der ursprüngliche "unerwünschte" Commit immer noch im Verlauf vorhanden ist, aber ein neuer "Revert"-Commit hinzugefügt wurde. Dieser neue Commit macht die Änderungen des unerwünschten Commits rückgängig.

Überprüfen Sie abschließend den Inhalt von story.txt, um zu bestätigen, dass die Änderung rückgängig gemacht wurde:

cat story.txt

Die Ausgabe sollte nun lauten:

Once upon a time, in a land of code.
The hero of our story was a brave developer.

Die unerwünschte Zeile wurde erfolgreich entfernt.

Rückgängigmachen unter Beibehaltung von Änderungen mit --no-commit

Manchmal möchten Sie die Änderungen eines Commits rückgängig machen, diese aber in Ihrem Arbeitsverzeichnis behalten, um sie zu ändern. Sie möchten beispielsweise einen Fehler im Commit korrigieren, anstatt ihn vollständig zu verwerfen. Die Option --no-commit (oder -n) ist dafür perfekt geeignet.

Zuerst setzen wir unser Repository auf den Zustand vor unserem letzten Revert zurück, damit wir einen anderen Ansatz versuchen können. Dazu verwenden wir git reset. Dieser Befehl verschiebt den HEAD-Zeiger, und --hard aktualisiert die Dateien in Ihrem Arbeitsverzeichnis entsprechend.

git reset --hard HEAD~1

Dieser Befehl entfernt den gerade erstellten "Revert"-Commit. Sie können dies bestätigen, indem Sie git log --oneline ausführen.

Nun machen wir den "unerwünschten" Commit erneut rückgängig, aber diesmal mit der Option --no-commit. Denken Sie daran, den Hash für den Commit "Add a second, unwanted line" zu verwenden.

Bitte ersetzen Sie <your-commit-hash> durch den tatsächlichen Hash aus Ihrem Terminal.

git revert --no-commit <your-commit-hash>

Dieses Mal öffnet sich kein Editor. Der Revert ist vorbereitet, aber nicht committet. Überprüfen Sie den Status Ihres Repositorys:

git status

Die Ausgabe zeigt, dass story.txt für den Commit vorgemerkt ist:

On branch master
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	modified:   story.txt

Die Änderungen des rückgängig gemachten Commits befinden sich nun in Ihrem Staging-Bereich. Sie können sie jetzt ändern. Ersetzen wir die unerwünschte Zeile durch eine bessere. Öffnen Sie story.txt mit nano:

nano story.txt

Die Datei wird so aussehen, wie sie nach dem Revert in Schritt 2 aussah. Fügen Sie am Ende der Datei eine neue, bessere Zeile hinzu:

And they lived happily ever after.

Speichern und beenden Sie nano (Strg+O, Enter, Strg+X).

Fügen Sie nun Ihre Änderungen zum Staging-Bereich hinzu und committen Sie sie mit einer neuen, aussagekräftigen Nachricht:

git add story.txt
git commit -m "Replace unwanted line with a proper conclusion"

Überprüfen Sie abschließend den Log und den Dateiinhalt, um das Ergebnis zu sehen:

git log --oneline
cat story.txt

Der Log zeigt Ihren neuen Commit an, und story.txt enthält den korrigierten Inhalt. Sie haben erfolgreich einen Commit rückgängig gemacht, während Sie dessen Änderungen beibehalten und modifiziert haben.

Zusammenfassung

In diesem Lab haben Sie gelernt, wie Sie einen Git-Commit sicher rückgängig machen, ohne Ihre Arbeit zu verlieren. Sie haben das Inspizieren des Commit-Verlaufs mit git log, das Ausführen eines Standard-git revert zum Erstellen eines neuen Commits, der vorherige Änderungen rückgängig macht, und die Verwendung der Option git revert --no-commit, um Änderungen in Ihren Staging-Bereich rückgängig zu machen und sie vor der Erstellung eines neuen Commits zu ändern, geübt. Diese Techniken sind unerlässlich für die saubere und sichere Verwaltung Ihres Projektverlaufs, insbesondere in einer Teamumgebung.