„Rollback“ und „Rückgängig machen“ sind Begriffe, die bedeuten, ein System, Code oder Daten in einen vorherigen Zustand zurückzuversetzen. In der Entwicklung ist dies eine grundlegende Operation, die in Versionskontrollsysteme, Datenbanken und Bereitstellungsmechanismen integriert ist. Laut der Git-Dokumentation können Rollback-Operationen sicher (revert mit Erstellung eines neuen Commits) und destruktiv (reset mit Verlust des Verlaufs) sein. Das Verständnis der Unterschiede zwischen ihnen hilft, Datenverlust beim Zurückkehren zu einer früheren Version zu vermeiden.
Wichtige Punkte
Rollback ist eine Operation, die ein System in einen vorherigen stabilen Zustand zurückversetzt. Im Kontext der Entwicklung kann dies bedeuten, einen Commit in Git rückgängig zu machen, eine Datenbanktransaktion zurückzusetzen oder zu einer früheren Version einer Anwendung auf dem Server zurückzukehren. Der Begriff stammt aus dem Englischen “Rollback“ und ist im Wortschatz der Entwickler aller Plattformen fest verankert.
Die Notwendigkeit eines Rollbacks entsteht, wenn eine neue Änderung die Funktionalität beeinträchtigt, Fehler verursacht oder die Qualitätsprüfung nicht besteht. In einem gut organisierten Entwicklungsprozess ist ein Rollback kein Zeichen von Misserfolg, sondern ein Standardverfahren, das in den Arbeitsablauf integriert ist. Je schneller ein Team eine problematische Änderung zurücksetzen kann, desto geringer ist die Auswirkung des Fehlers auf die Benutzer.
Verschiedene Werkzeuge bieten unterschiedliche Rollback-Mechanismen: Git bietet eine Wahl zwischen sicherem revert und destruktivem reset, Datenbanken unterstützen Transaktions-Rollback, und CI/CD-Systeme können den Datenverkehr zwischen Versionen umschalten. Die Wahl des Ansatzes hängt vom Kontext und den Anforderungen an die Erhaltung des Änderungsverlaufs ab.
Git revert ist eine sichere Rollback-Methode, die einen neuen Commit erstellt, der vorherige Änderungen rückgängig macht. Der Verlauf bleibt linear, und alle alten Commits bleiben erhalten. Dies ist die einzig richtige Wahl zum Rückgängigmachen in einem gemeinsamen Branch, an dem mehrere Entwickler arbeiten. Git revert löscht keinen Verlauf — es fügt die Tatsache des Rollbacks als neue Änderung hinzu.
Git reset verschiebt den Zeiger des aktuellen Branches auf einen bestimmten Commit und verwirft alle nachfolgenden Änderungen. Abhängig vom Flag — soft, mixed oder hard — behandelt reset das Arbeitsverzeichnis und den Index unterschiedlich. Der hard-Modus entfernt Änderungen vollständig aus dem Verlauf, was ihn gefährlich für gemeinsame Branches und nur für lokale Arbeit geeignet macht.
Revert wird in gemeinsamen Branches verwendet: main, develop, release. Es bewahrt den Verlauf und ermöglicht anderen Entwicklern zu verstehen, dass eine Änderung rückgängig gemacht wurde. Nach revert können Sie sicher git pull ausführen — das System erzeugt keine Konflikte in Bezug auf umgeschriebenen Verlauf. In der Teamarbeit ist revert der Standard.
# Letzten Commit durch Erstellen eines neuen Commits rückgängig machen
git revert HEAD
# Einen bestimmten Commit per Hash rückgängig machen
git revert a1b2c3d
Reset ist in einem lokalen Branch geeignet, in dem Sie noch keine Änderungen veröffentlicht haben. Wenn Sie experimentiert haben und den Verlauf vollständig bereinigen möchten — reset hard wird dies tun. In einem lokalen Branch können Sie reset mixed verwenden, um Commits rückgängig zu machen, aber die Änderungen im Arbeitsverzeichnis für einen erneuten Commit zu behalten.
# Letzten Commit rückgängig machen, Änderungen im Arbeitsverzeichnis behalten
git reset HEAD~1
# Vollständig rückgängig machen — Änderungen werden dauerhaft entfernt
git reset --hard HEAD~2
Transaktions-Rollback ist eine Operation, die alle Änderungen innerhalb der aktuellen Transaktion rückgängig macht und die Datenbank in den Zustand zu Beginn der Transaktion zurückversetzt. Dies garantiert die Atomarität — eines der vier ACID-Prinzipien (Atomicity, Consistency, Isolation, Durability). Wenn in irgendeiner Phase der Transaktion ein Fehler auftritt, wird ein Rollback ausgeführt und die Daten kehren in ihren ursprünglichen Zustand zurück.
Der Rollback-Mechanismus wird über das Write-Ahead-Log (WAL) implementiert. Bevor eine Datenseite geändert wird, schreibt das DBMS die alten und neuen Werte in das Log. Während des Rollbacks liest das System das Log und stellt die ursprünglichen Werte für alle geänderten Seiten wieder her. Dies stellt sicher, dass die Transaktion auch bei einem Stromausfall korrekt rückgängig gemacht werden kann.
BEGIN TRANSACTION;
UPDATE accounts
SET balance = balance - 100
WHERE id = 1;
-- Rollback on error
ROLLBACK;
Bei langen Transaktionen ist es praktisch, Savepoints zu verwenden — Zwischenspeicherpunkte, zu denen Sie zurückkehren können, ohne die gesamte Transaktion abzuschließen. Dies ermöglicht die Behandlung von Fehlern innerhalb einer komplexen Operation, ohne den Fortschritt in anderen Teilen zu verlieren. Savepoints werden von den meisten relationalen DBMS unterstützt: PostgreSQL, MySQL, Oracle.
SAVEPOINT sp1;
UPDATE orders SET status = 'cancelled'
WHERE id = 42;
ROLLBACK TO sp1;
Bereitstellungs-Rollback ist die Rückkehr einer laufenden Anwendung zu einer vorherigen Version nach einer fehlgeschlagenen Bereitstellung. Dies ist eine kritische Fähigkeit für Produktionsumgebungen: Die Wiederherstellungszeit (MTTR) wirkt sich direkt auf SLA und Benutzererfahrung aus. Moderne Plattformen bieten je nach Architektur und Verfügbarkeitsanforderungen mehrere Rollback-Strategien.
Blue-Green ist eine Strategie, bei der zwei identische Umgebungen gleichzeitig laufen: blue (aktuelle Version) und green (neue Version). Der Datenverkehr wird nach erfolgreicher Bereitstellung auf green umgeschaltet. Wenn die neue Version nicht korrekt funktioniert, kehrt der Verkehrsschalter zu blue zurück. Das Rollback erfolgt sofort, ohne erneute Bereitstellung — Sie müssen nur das Routing ändern.
Canary-Bereitstellung leitet einen kleinen Teil des Datenverkehrs an die neue Version und überwacht Metriken: Fehlerrate, Antwortzeit, Prozentsatz erfolgreicher Anfragen. Wenn sich die Metriken verschlechtern, führt das System automatisch ein Rollback des Canary durch und leitet den gesamten Datenverkehr an die stabile Version. Kubernetes und Service-Meshes (Istio, Linkerd) unterstützen diese Strategie standardmäßig.
apiVersion: apps/v1
kind: Deployment
spec:
replicas: 10
strategy:
rollingUpdate:
maxUnavailable: 1
maxSurge: 1
Betrachten wir drei typische Szenarien, in denen ein Entwickler Änderungen rückgängig machen muss. Jedes Szenario erfordert seinen eigenen Ansatz — von einem einfachen Befehl im Terminal bis zu einem mehrstufigen Verfahren mit CI/CD.
Sie haben versehentlich einen Commit mit einem Fehler in main gepusht. Ihre Aufgabe ist es, die Änderungen ohne Verlust des Verlaufs für das Team rückgängig zu machen. Verwenden Sie git revert, um einen rückgängig machenden Commit zu erstellen, und dann git push. Alle Teammitglieder sehen den Rollback und können konfliktfrei weiterarbeiten. Dies ist die sicherste und transparenteste Methode.
git checkout main
git pull origin main
git revert HEAD
git push origin main
Eine Datenbankmigration ist fehlgeschlagen und einige Daten sind beschädigt. Verwenden Sie Transaktions-Rollback im Migrationsskript und stellen Sie aus dem Backup für bereits angewendete Änderungen wieder her. In einem gut gestalteten System ist jede Migration in eine Transaktion eingebettet — bei einem Fehler führt das DBMS automatisch ein Rollback durch.
Nach der Bereitstellung einer neuen Version stellen Sie fest, dass die Authentifizierung nicht funktioniert. Wenn Sie Blue-Green verwenden, ist das Rollback das Zurückschalten des Routers. Bei einem Rolling Update — der Befehl kubectl rollout undo kehrt zur vorherigen Version zurück. Idealerweise sollte der Rollback-Prozess automatisiert sein und nicht länger als eine Minute dauern.
Häufig gestellte Fragen
Revert erstellt einen neuen Commit, der Änderungen rückgängig macht, und bewahrt den Verlauf. Reset verschiebt den Branch-Zeiger zurück und kann Commits löschen. Für gemeinsame Branches verwenden Sie nur revert.
Wenn Commits nicht von der Git-Garbage-Collection erfasst wurden, können sie über git reflog wiederhergestellt werden. Nach der Garbage-Collection ist eine Wiederherstellung jedoch nicht mehr möglich. Verwenden Sie --hard nur in lokalen Branches.
Rollback macht alle Änderungen in der aktuellen Transaktion rückgängig, indem es das Write-Ahead-Log (WAL) verwendet. Das DBMS stellt die ursprünglichen Werte für alle geänderten Datenseiten wieder her.
Savepoint ist ein Zwischenspeicherpunkt innerhalb einer Transaktion. Er ermöglicht ein partielles Rollback zu diesem Punkt, ohne die gesamte Transaktion abzubrechen. Nützlich bei langen Operationen mit mehreren Schritten.
Richten Sie Health Checks und Metriküberwachung nach der Bereitstellung ein. Wenn die Fehlerschwelle überschritten wird, lösen Sie ein automatisches Rollback über ein Skript oder ein Tool wie Spinnaker, ArgoCD oder GitLab Auto Rollback aus.
Zusammenfassung
Wir entwickeln eine mobile Applikation schlüsselfertig
IT Sectr entwickelt seit 2017 iOS- und Android-Apps für Startups und Unternehmen. Wir beraten Sie und schlagen die beste Lösung vor.
Lesen Sie auch