Der Befehl git revert ist ein Befehl zum Rückgängigmachen. Der Vorgang, der dahintersteckt, ist jedoch nicht wie bei einem herkömmlichen Rückgängigmachen. Anstatt den Commit aus dem Projektverlauf zu entfernen, wird ermittelt, wie durch den Commit bewirkte Änderungen umgekehrt werden können. Ein neuer Commit wird dann mit den entsprechenden umgekehrten Inhalten ergänzt. Somit wird verhindert, dass der Verlauf von Git verkürzt wird, was für die Integrität deines Überprüfungsverlaufs und für eine zuverlässige Zusammenarbeit wichtig ist.

Diesen Befehl zum Rückgängigmachen solltest du verwenden, wenn du einen Commit von deinem Projektverlauf umkehren möchtest. Das kann beispielsweise nützlich sein, wenn sich herausstellt, dass ein Bug durch einen ganz bestimmten Commit in das Projekt eingeführt wurde. Statt manuell zu dem entsprechenden Code zu navigieren, ihn zu korrigieren und einen neuen Snapshot zu committen, kannst du den gesamten Prozess mit git revert automatisch durchführen.

git revert: Git-Tutorials von Atlassian

Wie es funktioniert

$ mkdir git_revert_test
$ cd git_revert_test/
$ git init .
Initialized empty Git repository in /git_revert_test/.git/
$ touch demo_file
$ git add demo_file
$ git commit -am"initial commit"
[master (root-commit) 299b15f] initial commit
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 demo_file
$ echo "initial content" >> demo_file
$ git commit -am"add new content to demo file"
[master 3602d88] add new content to demo file
n 1 file changed, 1 insertion(+)
$ echo "prepended line content" >> demo_file
$ git commit -am"prepend content to demo file"
[master 86bb32e] prepend content to demo file
 1 file changed, 1 insertion(+)
$ git log --oneline
86bb32e prepend content to demo file
3602d88 add new content to demo file
299b15f initial commit

Hier haben wir ein Repository in einem neu erstellten Verzeichnis namens git_revert_test angelegt. Wir haben 3 Commits in dem Repository durchgeführt, wobei wir die Datei demo_file hinzugefügt und ihren Inhalt zweimal geändert haben. Am Schluss der Repository-Einrichtung lassen wir mit git log den Commit-Verlauf anzeigen und sehen, dass 3 Commits aufgezeichnet wurden. Im jetzigen Zustand des Repositorys können wir git revert ausführen.

$ git revert HEAD [master b9cd081] Revert "prepend content to demo file" 1 file changed, 1 deletion(-)

git revert erwartet eine Commit-Ref. Ohne sie wird der Befehl nicht ausgeführt. Hier haben wir die Referenz HEAD angegeben, was den neuesten Commit rückgängig machen wird. Dasselbe Verhalten würden wir beobachten, wenn wir auf den Commit 3602d8815dbfa78cd37cd4d189552764b5e96c58 zurückgesetzt hätten. Beim Rückgängigmachen wird, ähnlich wie bei einem Merge, ein neuer Commit erstellt, der den konfigurierten Systemeditor öffnet. Dieser fordert zur Eingabe einer neuen Commit-Nachricht auf. Sobald diese eingegeben und gespeichert wurde, setzt Git den Betrieb fort. Wir können jetzt den Status des Repositorys mithilfe des Befehls git log untersuchen und sehen, dass dem vorherigen Protokoll ein neuer Commit hinzugefügt wurde:

$ git log --oneline 1061e79 Revert "prepend content to demo file" 86bb32e prepend content to demo file 3602d88 add new content to demo file 299b15f initial commit

Wie du siehst, erscheint der 3. Commit auch nach der Rückgängigmachung noch im Projektverlauf. Statt ihn zu löschen, hat git revert einen neuen Commit hinzugefügt, der seine Änderungen rückgängig macht. Dadurch repräsentieren der 2. und der 4. Commit exakt dieselbe Codebasis und der 3. Commit ist immer noch im Verlauf verfügbar, falls er später noch einmal benötigt wird.

Allgemeine Optionen

-e
--edit

Das ist eine Standardoption, die nicht weiter ergänzt werden muss. Sie öffnet den konfigurierten Systemeditor und fordert dich zur Eingabe einer Commit-Nachricht auf, bevor du den Commit zum Rückgängigmachen durchführst.

--no-edit

Das ist die Umkehrung der Option -e. Nach Eingabe des revert-Befehls wird der Editor nicht geöffnet.

-n
--no-commit

Zurücksetzen vs. Rückgängigmachen

Es ist wichtig zu verstehen, dass git revert einen einzelnen Commit rückgängig macht. Der Befehl stellt nicht den vorherigen Projektstatus wieder her, wobei alle nachfolgenden Commits entfernt werden würden. In Git wird dies eigentlich als "reset" bezeichnet, nicht als "revert".

git revert vs. git reset: Git-Tutorials von Atlassian

Möchtest du dich mit "git revert" vertraut machen?

Sieh dir dieses interaktive Tutorial an.

Jetzt loslegen