freshidea - stock.adobe.com
Tutorial: So machen Sie einen Git Commit rückgängig
Viele Nutzer verwenden den Befehl git revert falsch. In dieser Anleitung erklären wir, wie Sie ihn richtig benutzen und einen Commit rückgängig machen.
Der wohl am meisten missverstandene Prozess in der Welt der verteilten Versionsverwaltung ist der Befehl git revert. In diesem Artikel erläutern wir anhand eines Beispiels, wie man einen Git Commit rückgängig macht, und den Unterschied zwischen den Befehlen git reset und git revert.
Der Befehl git revert dient dazu, alle Änderungen zu entfernen, die ein einzelner Commit an Ihrem Quellcode-Repository vorgenommen hat. Wenn zum Beispiel ein früherer Commit eine Datei namens index.html zum Projektarchiv hinzugefügt hat, löscht git revert für diesen Commit die Datei wieder aus dem Projektarchiv. Wenn ein früherer Commit eine neue Codezeile zu einer Java-Datei hinzugefügt hat, wird git revert für diesen Commit die hinzugefügte Zeile entfernen.
Wenn Sie einen Git Commit rückgängig machen, werden die Änderungen des betreffenden Commits aus Ihrem lokalen Arbeitsbereich entfernt. Außerdem wird ein neuer Commit erstellt, der den neuen Zustand des Repositorys widerspiegelt.
Der Befehl git revert
Die Syntax zum Rückgängigmachen eines Git Commits und der unerwünschten Änderungen ist einfach. Sie müssen lediglich den Befehl git revert aufrufen und die ID des Commits angeben, den Sie rückgängig machen möchten:
git@commit /c/revert example/
$ git revert 4945db2
Beispiel für ein git revert commit
Um wirklich zu verstehen, wie man Git Commits rückgängig macht, schauen Sie sich dieses git revert-Beispiel an.
Wir beginnen mit einem git init-Befehl, um ein komplett sauberes Repository zu erstellen:
git@commit /c/revert example/
$ git init
Initialized empty Git repo in C:/git revert example
Nachdem Sie das Repository initialisiert haben, fügen Sie fünf Dateien zum Repository hinzu. Jedes Mal, wenn eine neue Datei erstellt wird, fügen Sie diese dem Git-Index hinzu und erstellen eine neue Übergabe mit einer aussagekräftigen Nachricht.
git@commit /c/revert example/
$ touch alpha.html
$ git add . && git commit -m "1st git commit: 1 file"
$ touch beta.html
$ git add . && git commit -m "2nd git commit: 2 files"
$ touch charlie.html
$ git add . && git commit -m "3rd git commit: 3 files"
$ touch delta.html
$ git add . && git commit -m "4th git commit: 4 files"
$ touch edison.html
$ git add . && git commit -m "5th git commit: 5 files"
Eine schnelle Verzeichnisauflistung nach dem ersten Befehls-Batch zeigt fünf Dateien im aktuellen Ordner:
git@commit /c/revert example/
$ ls
alpha.html beta.html charlie.html delta.html edison.html
Ein Aufruf des git reflog-Befehls wird uns die derzeitige Commit History anzeigen:
git@commit /c/revert example/
$ git reflog
(HEAD -> master)
d846aa8 HEAD@{0}: commit: 5th git commit: 5 files
0c59891 HEAD@{1}: commit: 4th git commit: 4 files
4945db2 HEAD@{2}: commit: 3rd git commit: 3 files
defc4eb HEAD@{3}: commit: 2nd git commit: 2 files
2938ee3 HEAD@{4}: commit: 1st git commit: 1 file
Wie man einen Git Commit rückgängig macht
Was passiert nun, wenn wir den dritten Commit mit der ID 4945db2 mit Git rückgängig machen würden? Dies war der Git Commit, der die Datei charlie.html hinzugefügt hat.
git@commit /c/revert example/
$ git revert 4945db2
Entfernt der Git Revert von Commit 4945db2 charlie.html, delta.html und edison.html aus dem lokalen Arbeitsbereich? Oder nur delta.html und edison.html, lässt aber die anderen Dateien in Ruhe?
Oder wird dieses Git-Revert-Beispiel vier Dateien im lokalen Arbeitsbereich belassen und nur die Datei charlie.html entfernen?
Wenn Sie sich für die letzte Variante entscheiden, haben Sie recht. Der Grund dafür ist folgender:
Der Befehl git revert macht nur die Änderungen rückgängig, die mit einem bestimmten Commit verbunden sind. In diesem Beispiel hat der dritte Commit die Datei charlie.html hinzugefügt. Wenn wir ihn rückgängig machen, wird nur diese Datei gelöscht und keine andere:
git@commit /c/revert example/
$ ls
alpha.html beta.html delta.html edison.html
Sie sollten wissen, dass beim Zurücknehmen eines Commits mit Git der zurückgenommene Commit aus ihrem lokalen Arbeitsbereich, nicht aber aus dem lokalen Repository gelöscht wird. Der mit dem rückgängig gemachten Git Commit verbundene Code bleibt in der Änderungshistorie des Repositorys gespeichert, was bedeutet, dass er immer noch referenzierbar ist, falls in Zukunft darauf zugegriffen oder er überprüft werden muss.
git revert versus git reset
Wenn Sie einen Commit mit git revert zurücksetzen, werden nur die mit diesem Commit verbundenen Änderungen rückgängig gemacht. Kumulative Änderungen aus nachfolgenden Übertragungen sind davon nicht betroffen. Wenn Sie alle Änderungen seit einem bestimmten Commit rückgängig machen wollen, müssen Sie einen harten git reset ausführen, nicht revert.
Die Befehle git reset und revert werden häufig verwechselt, doch sie gelten für unterschiedliche Anwendungsfälle. Um Änderungen im Zusammenhang mit einem bestimmten Commit rückgängig zu machen, sollten Entwickler den Befehl git revert verwenden. Um alle Änderungen seit einem bestimmten Commit rückgängig zu machen, geben Sie git reset ein. In dem speziellen Fall, dass ein Entwickler nur den letzten Commit rückgängig machen möchte, reicht einer der beiden Befehle git revert oder git reset aus.
Schritte zum Rückgängigmachen eines Git Commits
Die folgenden Schritte sind notwendig, um einen Commit zurückzunehmen und unerwünschte Änderungen rückgängig zu machen:
- Suchen Sie die ID des Commits, den Sie rückgängig machen wollen, mit dem Befehl git log oder reflog.
- Führen Sie den Befehl git revert aus und geben Sie die gewünschte Commit-ID an.
- Geben Sie eine aussagekräftige Git Commit-Nachricht an, um zu beschreiben, warum das Rückgängigmachen erforderlich war.
Der Befehl git revert ist ein einfaches Mittel, um einen Fehler zu beseitigen, der irgendwann in der Vergangenheit in das Versionskontrollsystem geraten ist, oder um eine Funktionserweiterung rückgängig zu machen, die beim Kunden nicht gut ankam. Wenn Sie Änderungen rückgängig machen wollen, die in einem bestimmten Commit stattgefunden haben, ist der Befehl git revert die richtige Operation für Sie.