Lernpfad
In der Softwareentwicklung sind Fehler einfach Teil des Prozesses, aber es kommt drauf an, wie du damit umgehst, vor allem im Team.
Wenn du mit Git in einem geteilten Repository arbeitest, willst du nicht nur einen schlechten Commit rückgängig machen, sondern das auch sicher machen. Deshalb hab ich aus meiner Erfahrung einen Artikel auf git revert
geschrieben.
Anstatt die Historie zu löschen wie bei „ git reset
“, macht „ git revert
“ einen neuen Commit, der die Änderungen aus dem vorherigen Commit rückgängig macht. Mit diesem Ansatz bleibt dein Commit-Verlauf erhalten.
Wenn du mit diesen Konzepten noch nicht vertraut bist, schau dir unseren Lernpfad „Git-Grundlagen“ an und lerne alles über Repositorys und Versionskontrolle.
Was ist Git Revert und wie funktioniert es?
Stell dir „ git revert
“ wie eine Art Git-Befehl vor, der sagt: „Lass uns das sicher rückgängig machen.“ Wenn dir in einem Commit was durchrutscht – vielleicht ein Bug, ein Tippfehler oder eine überstürzte Änderung – bist du vielleicht versucht, das zu löschen. Aber in einem geteilten Repo kann das Löschen des Verlaufs mehr Probleme verursachen als der ursprüngliche Fehler. Deshalb gibt es „ git revert
“. Anstatt den Commit zu löschen, wird ein neuer hinzugefügt, der die Änderungen rückgängig macht.
Also, was macht „ git revert
“?
-
Es wird ein neuer Commit hinzugefügt: Wie ich schon gesagt habe, löscht „
git revert
“ nichts, sondern erstellt einen neuen Commit, der die spezifischen Änderungen rückgängig macht, die du rückgängig machen willst. So bleibt dein Projektverlauf immer auf dem gleichen Stand. -
Die Änderung wird sofort übernommen: Wie ich noch nicht erwähnt habe, werden die rückgängig gemachten Änderungen in deinem Arbeitsverzeichnis angezeigt, sobald du den Befehl „
git revert
“ ausführst. Du wirst die Korrektur also live sehen können. -
Das stört die Staging-Phase nicht (es sei denn, es gibt einen Konflikt): Noch was, das du wissen solltest: Git kümmert sich intern um das Zurücksetzen. Wenn alles glatt läuft, musst du die Dateien nicht manuell bereitstellen. Wenn Git aber nicht weiß, wie es etwas rückgängig machen soll (z. B. bei komplizierten Zusammenführungen), fragst du nach und musst helfen.
Was passiert nach dem Zurücksetzen eines Commits?
Du hast also „ git revert
“ ausgeführt. Was ist da gerade passiert? Anstatt irgendwas zu löschen, macht Git einen neuen Commit, der die Änderungen rückgängig macht, die du vorgenommen hast. Dieser neue Commit wird oben in deinen bestehenden Verlauf eingefügt, was bedeutet, dass der ursprüngliche Commit unverändert und vollständig sichtbar bleibt. Es wird nichts umgeschrieben oder gelöscht; stattdessen fügt Git eine Ebene hinzu, die im Grunde sagt: „Mach das rückgängig.“ Gleichzeitig werden die Dateiänderungen aus dieser Umkehrung sofort in deinem Arbeitsverzeichnis übernommen. Du wirst sehen, dass die Änderung sofort wirksam wird, genau wie bei jedem anderen Commit.
Dieser ganze Prozess macht „ git revert
“ zur sichersten Methode, um Fehler zu beheben, die schon in einen geteilten Branch gepusht wurden. Jeder im Team kann sehen, was geändert oder zurückgesetzt wurde und warum, ohne dass es zu Verwirrung oder Unterbrechungen der laufenden Arbeit kommt.
Vergleich zwischen git revert und git reset
Sowohl „ git revert
“ als auch „ git reset
“ können zum Rückgängigmachen von Commits verwendet werden, funktionieren aber ganz unterschiedlich. „ git reset
“ eignet sich gut für lokale, private Korrekturen. Damit kannst du unordentliche Commits aufräumen und dein Arbeitsverzeichnis genau so zurücksetzen, wie du es willst. Aber es gibt einen Haken: Wenn du deine Arbeit schon gepusht und dann „ git reset
“ benutzt hast, kannst du deinen Teamkollegen Probleme bereiten, indem du die gemeinsame Commit-Historie änderst.
git revert
, hingegen, ist speziell für gemeinsam genutzte oder öffentliche Branches gedacht. Anstatt irgendwas zu löschen, wird ein neuer Commit erstellt, der die Änderungen aus einem früheren Commit rückgängig macht. Das macht es sicherer in gemeinsamen Projekten.
Hier ist ein direkter Vergleich, um das zu verdeutlichen:
Funktion |
git rückgängig machen |
git zurücksetzen |
Maßnahme |
Fügt einen neuen Commit hinzu, der einen vorherigen Commit rückgängig macht. |
Verschiebt den Branch-Zeiger und ändert optional Dateien |
Commit-Verlauf |
Alles ist da, nichts wurde gelöscht. |
Überarbeitete Commits können verloren gehen. |
Am besten geeignet für |
Änderungen in einem öffentlichen/gemeinsamen Branch rückgängig machen |
Lokale Commits vor dem Pushen bereinigen |
Auswirkungen auf andere |
Sicher, keine Störung für die Mitarbeiter |
Riskante Konflikte können entstehen, wenn der Verlauf geteilt wird. |
Arbeitsverzeichnis |
Änderungen werden sofort übernommen |
Kann den Status von Dateien zurücksetzen (--soft, --mixed, --hard) |
Ideales Szenario |
Einen schlechten Commit rückgängig machen, der schon gepusht wurde |
Commit-Verlauf in einem lokalen Feature-Branch umschreiben |
Mehrere Commits rückgängig machen
Manchmal ist es nicht nur ein schlechter Commit, sondern du musst vielleicht eine ganze Reihe davon rückgängig machen. Zum Glück kannst du mit Git mehrere Commits mit einem einzigen Befehl über einen Commit-Bereich rückgängig machen.
Die Syntax sieht so aus:
git revert OLDEST_HASH^..NEWEST_HASH
Damit sagst du Git, dass es kurz vor dem ältesten Commit anfangen soll (dafür ist „ ^
“ da ) und alle Commits bis zum letzten rückgängig machen soll. Zum Beispiel:
git revert a1b2c3d^..d4e5f6g
Dieser Befehl macht separate Rückgängig-Commits für jeden der ursprünglichen Commits in diesem Bereich.
Hey, Wenn du mehrere Commits auf einmal rückgängig machst, kann das oft zu Merge-Konflikten führen, vor allem wenn diese Commits dieselben Dateien oder Zeilen betreffen. Git versucht, jeden Commit der Reihe nach rückgängig zu machen, aber du musst vielleicht bei der Lösung von Überschneidungen helfen.
Weitere Infos dazu, wie Git Rückgängig-Operationen macht, auch bei kniffligeren Sachen wieMerge-Commits, findest duunter Git Revert Merge Commit: Ein Leitfaden mit Beispielen.
Umgang mit Merge-Konflikten beim Zurücksetzen
Das Zurücksetzen klingt vielleicht einfach, bis Git dir einen Strich durch die Rechnung macht – einen Merge-Konflikt. Diese tauchen normalerweise auf, wenn:
- Du machst einen Commit rückgängig, der dieselben Zeilen geändert hat wie andere Commits aus der letzten Zeit.
- Du machst einen Merge-Commit oder eine Gruppe von Commits mit sich überschneidenden Änderungen rückgängig.
Git versucht, die Änderungen so sauber wie möglich rückgängig zu machen. Wenn es aber unklar ist, was zu tun ist, hält es inne und fragt dich um Hilfe.
So geht's:
git revert HEAD
Und um zu checken, welche Dateien Konflikte haben, nimm:
git status
Umdie Konflikte in deinem Code-Editormanuell zu lösen, such nach den Markierungen „ <<<<<<<
“, „ =======
“ und „ >>>>>>>
“.
Hier markiere ich sie als erledigt:
git add <resolved-file>
Jetzt mache ich mit dem Zurücksetzen weiter:
git revert-- continue
Wenn du es dir anders überlegt hast und die Rückgängigmachung komplett rückgängig machen willst:
git revert --abort
Mit diesem Ablauf hast du alles im Griff. Du kannst entscheiden, ob du die Rückgängigmachung fortsetzen oder ganz abbrechen möchtest.
Wenn du wissen willst, wie Git bei solchen Vorgängen Referenzprotokolle im Lernpfad speichert, schau dir „ “ an . Git Reflog: Verstehen und Verwenden von Referenzprotokollen für Tipps zur Fehlerbehebung bei unübersichtlichen Verläufen.
Sonderfälle: Zusammenführungs-Commits rückgängig machen
Einen normalen Commit rückgängig zu machen ist einfach, aber Merge-Commits sind eine ganz andere Sache. Das liegt daran, dass ein Merge-Commit zwei oder mehr Eltern hat und Git wissen muss, welchen Pfad (oder „Hauptlinie“) es als Basis nehmen soll.
Um einen Merge-Commit rückgängig zu machen, musst du das -m
Flag explizit setzen.
git revert -m 1 <merge-commit-hash>
Das macht die Option „ -m
“:
-
„
-m
“ steht für „mainline“ und sagt Git, welcher übergeordnete Commit beibehalten werden soll. -
1
Bezieht sich normalerweise auf den ersten Parent, meistens den Branch, in dem du warst, als der Merge passiert ist. -
2
bezieht sich auf den zweiten Elternteil, oft den Zweig, in den der andere Zweig integriert wurde.
Wann würdest du 1 oder 2 verwenden?
-
Verwende „
-m 1
“, wenn du die Auswirkungen der zusammengeführten Änderungen rückgängig machen, aber die Arbeit aus deinem Hauptzweig behalten möchtest. -
Benutze „
-m 2
“, wenn du die Änderungen der Hauptlinie entfernen, aber die Funktion oder den Inhalt des zusammengeführten Zweigs behalten willst. Das ist echt selten. Das Rückgängigmachen eines Merge-Commits kann leicht zu Konflikten führen und oft ein ziemliches Durcheinander verursachen, vor allem wenn nachfolgende Commits davon abhängen. Wenn du dir nicht sicher bist, versuch es erst mal in einem Testzweig rückgängig zu machen.
Tipps für die Verwendung von git revert
Um das Beste aus „ git revert
“ rauszuholen und die häufigsten Fehler zu vermeiden, solltest du diese Tipps beachten:
-
Überprüfe die Commit-Hashes, bevor duzurücksetzt: Schau dir immer deine Commit-Historie über „
git log
“ oder „git log-- oneline
“ an, um sicherzugehen, dass du die richtige Änderung angehst. Du kannst diese Befehle unter „“ in „Grundlagen von Git“ auffrischen oder dir die wichtigsten mit unserem Git-Spickzettel merken. -
Passe deine Commit-Nachricht an: Gib dich nicht mit der Standardmeldung „Revert“ von Git zufrieden. Füge Infos hinzu, z. B. warum du den Commit rückgängig gemacht hast, damit andere (und du selbst später) die Änderung besser verstehen können.
-
Kommunizieren, wenn du zu geteilten Branches zurückkehrst: Wenn du Änderungen in einem öffentlichen Branch rückgängig machst, wie z. B. main oder develop, sag deinem Team vorher Bescheid. Reverts betreffen alle, und es ist am besten, sich abzusprechen. Mehr über kollaborative Workflows erfährst du in unseren Kursen „GitHub -Grundlagen “ und „GitHub für Fortgeschrittene “.
-
Vermeide es, eine Rückgängigmachung rückgängig zu machen, es sei denn, du bist dir ganz sicher: Wenn du eine vorherige Rückgängigmachung rückgängig machst, kann das unbeabsichtigte Änderungen zurückbringen oder Konflikte verursachen. Wenn du eine Änderung erneut anwenden musst, solltest du stattdessen git cherry-pick verwenden.
- Wenn was schiefgeht, kannst du mit reflog alles wieder hinbekommen:: Hast du beim Zurücksetzen einen Fehler gemacht? Mit git reflog kannst du deine letzten Aktionen anschauen und verlorene Versions en wiederherstellen.
Fazit
git revert
Wenn du in einem professionellen Umfeld zusammenarbeitest, hilft das Speichern von Commits unter git revert HEAD
bis zum letzten Commit dabei, Transparenz zu wahren und das Risiko eines versehentlichen Datenverlusts zu verringern. Egal, ob du einen Fehler bereinigen oder einen Bug rückgängig machen willst, mit „revert“ bleibt dein Repo stabil und für alle Beteiligten verständlich.
Lerne heute die Git-Grundlagen
Technischer Redakteur, der sich auf KI, ML und Datenwissenschaft spezialisiert hat und komplexe Ideen verständlich und nachvollziehbar macht.