Sergey Nivens - Fotolia
Wie man ein Git Commit mit git revert rückgängig macht
Der Befehl git revert dient dazu, Änderungen rückgängig zu machen, die ein Commit am Quellcode-Verzeichnis vorgenommen hat. Wie der Befehl funktioniert.
Die wohl am häufigsten missverstandene Operation in der Welt der verteilten Versionskontrolle ist der Befehl git revert. Gehen wir an einem Beispiel durch, wie man eine Git-Übertragung rückgängig macht, und was die Befehle git reset und git revert unterscheidet.
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, entfernt git revert für diesen Commit die Datei index.html aus dem Projektarchiv. Wenn ein früherer Commit eine neue Codezeile zu einer Java-Datei hinzugefügt hat, entfernt git revert für diesen Commit die hinzugefügte Zeile.
Wenn Sie einen Git Commit rückgängig machen, werden die Änderungen des betreffenden Commit 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 Zurücknehmen eines Git Commit und zum Rückgängigmachen unerwünschter Änderungen ist einfach. Entwickler müssen lediglich den Befehl git revert aufrufen und die ID des Commit angeben, der rückgängig gemacht werden soll:
git@commit /c/revert example/
$ git revert 4945db2
Beispiel für ein git revert Commit
Um zu verstehen, wie man 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 das Repository initialisiert wurde, fügen wir dem Repository fünf Dateien hinzu. Jedes Mal, wenn eine neue Datei erstellt wird, fügen wir sie dem Git-Index hinzu und erstellen eine neues Commit 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 Batch-Befehl 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 Befehls git reflog zeigt uns den aktuellen Übergabeverlauf:
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 wohl, wenn wir den dritten Commit mit der ID 4945db2 rückgängig machen? Dies war der Git Commit, der die Datei charlie.html hinzugefügt hat.
git@commit /c/revert example/
$ git revert 4945db2
Entfernt der Befehl git revert von Commit 4945db2 die Dateien charlie.html, delta.html und edison.html aus dem lokalen Arbeitsbereich?
Entfernt der git revert von Commit 4945db2 delta.html und edison.html aus dem lokalen Arbeitsbereich, 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 ist: Der Befehl git revert macht nur die Änderungen rückgängig, die mit einem bestimmten Commit verbunden sind. In diesem Beispiel von git revert hat der dritte Commit die Datei charlie.html hinzugefügt. Wenn wir diesen Git Commit rückgängig machen, wird nur die Datei charlie.html aus unserem Repository entfernt.
git@commit /c/revert example/
$ ls
alpha.html beta.html delta.html edison.html
Entwickler müssen auch wissen, dass beim Zurücksetzen eines Commits mit git revert der zurückgesetzte Commit aus ihrem lokalen Arbeitsbereich, nicht aber aus dem lokalen Repository gelöscht wird. Der mit dem rückgängig gemachten Commit verbundene Code bleibt in der Änderungshistorie des Repositorys gespeichert, was bedeutet, dass der rückgängig gemachte Code immer noch referenzierbar ist, falls in Zukunft darauf zugegriffen oder er überprüft werden muss.
Vergleich git revert versus 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.
Die Befehle git reset und git revert werden häufig verwechselt, aber sie dienen 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, verwenden Sie git reset. Im 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 einer Git-Übertragung
Die folgenden Schritte sind nötig, um einen Commit 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 ein, um zu beschreiben, warum dies erforderlich war.
Der Befehl git revert ist ein einfaches Mittel, um einen Fehler zu beseitigen, der irgendwann in der Vergangenheit in das Versionskontrollsystem eingeführt wurde, 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 Option für Sie.