Kurs
Wenn du schon einmal an einem Gruppenprogrammierprojekt gearbeitet hast, weißt du, wie schnell die Dinge aus dem Ruder laufen können, wenn du versuchst, eine Änderung rückgängig zu machen. Eine falsche Bewegung und du könntest deine eigene Arbeit zunichte machen oder schlimmer noch: etwas kaputt machen, das dein Teamkollege gerade geschoben hat.
Deshalb ist es so wichtig zu wissen, welche Möglichkeiten Git bietet, um Fehler rückgängig zu machen, und wann man welche Option nutzen sollte. Einige Befehle sind sicher für Teamumgebungen, während andere besser für lokale Aufräumarbeiten geeignet sind, bei denen du die Geschichte neu schreiben kannst.
Dieser Leitfaden führt dich durch alle Schritte. Du lernst die verschiedenen Möglichkeiten, Commits rückgängig zu machen, wie sie funktionieren und welche du je nach Situation wählen solltest.
Die Git Commit Historie verstehen
Hast du schon mal "Strg+S" gedrückt, um eine Dokumentversion zu speichern und später wieder auf sie zuzugreifen? Das ist genau das, was ein Git Commit macht, aber für deine gesamte Codebasis.
Was ist ein Commit in Git?
Ein Git-Commit ist der Schnappschuss deinesojekts zu einem bestimmten Zeitpunkt. Es friert den aktuellen Stand aller deiner Dateien ein und weist dieser Version eine eindeutige ID zu, als ob du ein Foto mit Zeitstempel von deinem Code machen würdest. Du kannst immer zu diesem Punkt zurückspulen, wenn später etwas kaputt geht.
Wie funktioniert das? Wenn du eine Datei in deinem Repo änderst, werden die Änderungen nicht sofort gespeichert. Stattdessen existieren sie lokal in deinem aktuellen Arbeitsverzeichnis. Um sie zu speichern, werden diese Änderungen bereitgestellt und dann in das Repository übertragen. Dein Commit-Verlauf ist das Protokoll aller Commits, die an einem Repository durchgeführt wurden.
Lokale vs. Remote Commits
Lokale Commits bleiben auf deinem Rechner und sind für deine Kollegen oder Mitarbeiter nicht sichtbar, bis du dich entscheidest, sie zu teilen. Das bedeutet, dass du mehr Kontrolle über sie hast: Du kannst den Verlauf umschreiben, zerdrücken, löschen oder zurücksetzen, ohne dass andere davon betroffen sind.
Remote Commits hingegen sind für jeden zugänglich, der an dem Repository arbeitet. Das bedeutet, dass du diese Commits nicht umschreiben oder löschen solltest. Wenn du das tust, macht das die Dinge für deine Teamkollegen kaputt, wenn sie denselben Remote-Zweig verwenden. Du solltest also vorsichtig sein und wissen, was du tust, bevor du die gemeinsame Geschichte umschreibst.
Den letzten Git Commit lokal rückgängig machen
In Git verweist HEAD auf den letzten Commit in der Geschichte deines Projekts. Wenn du den Befehl git reset
verwendest, weist du Git an, diesen Zeiger auf einen anderen Commit zu verschieben.
Im Folgenden erklären wir dir, wie du mit git reset
die letzte Übergabe in verschiedenen Szenarien rückgängig machen kannst.
Mit git reset --soft HEAD~1
Er verschiebt HEAD zurück zu einem Commit, lässt deine Änderungen aber in der Staging Area. Deine Dateien bleiben unangetastet und alles, was du festgelegt hast, steht immer noch in der Warteschlange im Bühnenbereich. Verwende dies, wenn du den Commit selbst rückgängig machen willst, aber alle Änderungen vorbereitet und bereitgestellt bleiben sollen.
Mit git reset --mixed HEAD~1
Dieser hier geht noch einen Schritt weiter. Auch verschiebt HEAD zurück zu einem Commit, räumt aber die Staging Area. Deine Dateien befinden sich immer noch in deinem Arbeitsverzeichnis, aber es wird nichts mehr bereitgestellt. Dies ist der Standardmodus von git reset
.
Mit git reset --head HEAD~1
Er verschiebt HEAD zurück, leert den Staging-Bereich und löscht die Änderungen in deinem Arbeitsverzeichnis. Es ist, als hätte die letzte Übertragung (und alle damit verbundenen Änderungen) nie existiert.
Sei vorsichtig damit - wenn die Veränderungen einmal weg sind, ist es schwierig, sie wiederherzustellen. Führe dies also nur durch, wenn du dir absolut sicher bist, dass du nichts von der letzten Übertragung brauchst.
Beispiel 1: Den letzten Commit lokal rückgängig machen (sichere Nacharbeit)
Angenommen, du hast gerade einen Commit gemacht, aber festgestellt, dass du vergessen hast, die README-Datei zu aktualisieren.
Szenario:
Du hast Änderungen an main.py
vorgenommen, aber vergessen, README.md
zu aktualisieren. Du willst den letzten Commit ändern, ohne dass andere davon betroffen sind, und du hast noch nichts gepusht.
Lösung:
Verwende git reset --soft HEAD~1
, um die Übergabe rückgängig zu machen und deine Änderungen beizubehalten:
git reset --soft HEAD~1
Aktualisiere jetzt deine README-Datei, füge sie zur Bühne hinzu und bestätige alles:
git add README.md
git commit -m "Update main.py and README.md"
✅ Warum das funktioniert: Da der Commit nicht gepusht wurde, kannst du die lokale Geschichte umschreiben, ohne jemanden zu beeinflussen.
Einen gepushten Git Commit rückgängig machen
Du hast also einen Commit verschoben... und bereust es jetzt. Das haben wir alle schon erlebt. Aber wie kannst du das rückgängig machen, ohne die Arbeit deiner Teammitglieder zu zerstören?
Umschreiben der Geschichte mit git push --force
Normalerweise kannst du mit Git nur pushen, wenn dein lokaler Zweig kürzlich gezogen wurde und mit dem entfernten Zweig auf dem neuesten Stand ist. Du kannst diese Regel aber mit einem Superpower-Befehl wie push --force
außer Kraft setzen. Er überschreibt den gesamten Verlauf der entfernten Seite mit dem, was sich in deinem lokalen Zweig befindet.
Deshalb ist --force
mächtig, aber gefährlich. In einer Teamumgebung kann es die Commits deiner Kollegen löschen, wenn sie nicht in deinen lokalen Zweig gezogen wurden. Verwende sie nur, wenn du genau weißt, was du tust - und idealerweise, wenn du der Einzige bist, der an dem Repo arbeitet.
Neben push --force
gibt es auch pull --force
, einen weiteren mächtigen Befehl, der mit Vorsicht zu genießen ist. Learn über sie hier.
Sicherere Alternativen mit git revert
Wenn du einen Commit rückgängig machen willst, ohne die Historie zu löschen, ist git revert
die beste Wahl. Es wird kein Commit gelöscht, sondern ein neues erstellt, das die Änderungen rückgängig macht.
Angenommen, du hast eine Datei mit dem Namen streamlit_app.py
übertragen und willst sie loswerden. git revert
erzeugt eine neue Übertragung, die nur diese Datei löscht, während der Rest der Historie intakt bleibt.
Standardmäßig zielt git revert
auf die letzte Übertragung ab. Du kannst aber auch ältere Commits rückgängig machen, indem du ihre Commit-ID angibst.
Beispiel 2: Einen gepushten Commit auf einem gemeinsamen Zweig sicher rückgängig machen
Angenommen, du hast eine fehlerhafte Konfigurationsänderung vorgenommen und musst sie rückgängig machen, ohne den Verlauf zu löschen.
Szenario:
Du hast einen Commit durchgeführt, der eine falsche Zeile in config.yaml
einfügt. Dein Team arbeitet bereits an demselben Remote-Zweig (main
), also kannst du weder reset
noch force-push verwenden.
Lösung:
Verwende git revert
, um die Übergabe sicher rückgängig zu machen:
git revert <commit-hash>
Dadurch wird ein Texteditor geöffnet, mit dem du die Rückgängig-Meldung bestätigen kannst. Speichere und schließe den Editor, um eine neue Übergabe zu erstellen, die die vorherige rückgängig macht.
Wenn die letzte Übertragung diejenige ist, die rückgängig gemacht werden soll:
git revert HEAD
Dann gib die Änderungen weiter:
git push origin main
✅ Warum das funktioniert: git revert
schreibt die Geschichte nicht um - es fügt eine neue Übergabe hinzu. Das macht sie sicher für gemeinsame Zweige und Teamworkflows.
Visualisieren und Bestätigen von Änderungen
Manchmal willst du einfach nur sehen, was bisher passiert ist - so als würdest du zu früheren Versionen zurückblättern, um den Commit zu finden, den du rückgängig machen willst. Git gibt dir Werkzeuge, um genau das zu tun.
Git Log verwenden, um den Commit-Verlauf zu prüfen
Wenn du git log
in deinem Terminal ausführst, erhältst du eine vollständige Liste aller Commits in deinem aktuellen Branch. Damit kannst du einen bestimmten Commit identifizieren, den du rückgängig machen oder ändern möchtest.
Zum Beispiel könnte die Ausgabe von git log
so aussehen:
- e3a1b7f Tippfehler in der README korrigieren
- 4f2c9a1 Login-Validierung hinzufügen
- 9d5b3e8 Erste Übergabe
Jede Zeile zeigt einen Commit-Hash und eine Nachricht. Wenn du jemals eine bestimmte Änderung rückgängig machen willst, kopiere einfach den Commit-Hash und verwende ihn mit git revert
.
Verwendung von GUI-Tools oder Erweiterungen
Wenn du kein Entwickler bist oder noch nie mit Versionskontrolle gearbeitet hast, können sich all diese Befehlszeilenanweisungen wie eine Fremdsprache anfühlen. Hier kommen die GUI-Tools ins Spiel. Sie machen Git visuell und anfängerfreundlich, sodass du dich auf das Wesentliche konzentrieren kannst, ohne Befehle auswendig lernen zu müssen.
GitHub Desktop
GitHub Desktop ist eine kostenlose App, die eine übersichtliche und einfache Oberfläche für die Arbeit mit deinen GitHub-Repositories bietet. Sobald du es installiert hast, kannst du damit Zweige erstellen, Commits machen, Push-to-Remote durchführen und dein Projekt verwalten - alles mit Klicks statt mit Git-Befehlen.
Es ist perfekt, wenn du Git zum ersten Mal verwendest oder einfach nur Änderungen einfacher verwalten willst.
GitHub Desktop-Benutzeroberfläche. Bildquelle.
Quellennachweis
Sourcetree ist ein kostenloses Git GUI-Tool für Mac und Windows. Es gibt dir eine visuelle Möglichkeit, Zweige, Commits und Merges zu verwalten, ohne dass du das Terminal berühren musst. Es ist leichtgewichtig, anfängerfreundlich und funktioniert gut mit beliebten Plattformen wie GitHub, GitLab und Bitbucket.
Da es von Atlassian entwickelt wurde, lässt es sich auch gut mit anderen Atlassian-Tools wie Jira, Confluence und Bamboo kombinieren, was es zu einer guten Wahl macht, wenn dein Team dieses Ökosystem bereits nutzt.
Sourcetree Benutzeroberfläche. Bildquelle.
GitKraken
GitKraken ist eine funktionsreiche Git-GUI, die das Arbeiten mit Repositories reibungslos und visuell gestaltet. Das größte Highlight ist die Graph-Ansicht - eine bunte, interaktive Zeitleiste, die die Geschichte deines Repos darstellt und mit der du Branches, Merges und Commits leicht verfolgen kannst.
Auf der linken Seite siehst du den Dateibaum deines Projekts. Auf der rechten Seite erhältst du detaillierte Informationen über die Commit, die Datei oder den Branch, auf die du klickst. Es ist intuitiv, einsteigerfreundlich und bietet auch fortgeschrittenen Nutzern viele leistungsstarke Funktionen.
GitKraken ist für die private Nutzung kostenlos, aber wenn du in einem Unternehmen arbeitest oder private Repos verwaltest, brauchst du einen kostenpflichtigen Plan.
Gitkraken user interface. Bildquelle.
Best Practices für das Rückgängigmachen von Git Commits
Das Rückgängigmachen eines Commits ist nichts, wovor du dich fürchten musst, solange du gute Praktiken befolgst. Lass uns darüber reden, was sie sind.
Verwende Zweige zum Experimentieren
Immer wenn du etwas Neues entwickelst oder einen Fehler behebst, legst du einen separaten Zweig neben dem Hauptzweig an. Erledige deine Arbeit dort, teste sie gründlich und führe sie erst dann wieder in den Hauptzweig ein.
Auf diese Weise bleiben alle Fehler oder Rollbacks sicher in deinem Zweig, ohne die Arbeit des restlichen Teams zu beeinträchtigen.
Im Zweifelsfall verwende git revert
Angenommen, du hast ein paar Commits in einem lokalen Zweig gemacht und sie versehentlich in den Hauptzweig verschoben. Ups. Nun möchtest du einen dieser Commits rückgängig machen, ohne die gemeinsame Historie zu zerstören. Das ist der Punkt, an dem git revert
den Tag rettet.
Führe git revert HEAD~1
aus. Dadurch wird ein neuer Commit erstellt, der die Änderungen des vorletzten Commits rückgängig macht (weil HEAD~1 auf diesen verweist). Es löscht nichts, sondern macht die Änderungen auf saubere, nachvollziehbare Weise rückgängig.
Wenn du das getan hast, vergiss nicht, die Korrektur mit git push origin
auf die Fernbedienung zu übertragen.
Hinweis: Wenn die Änderungen bereits in einen gemeinsamen Zweig verschoben wurden, verwende git revert
. So bleibt der Commit-Verlauf intakt und deine Teammitglieder werden nicht gestört.
Dokumentiere deine Änderungen
Du musst keine Confluence-Seite aufrufen, um deinen Versionsverlauf zu pflegen, weil Git das bereits für dich erledigt. Die Kunst besteht darin, sie geschickt einzusetzen.
Beginne mit klaren, aussagekräftigen Commit-Botschaften. Wenn du etwas rückgängig machst, solltest du in der Nachricht erklären, warum du es rückgängig machst.
Notiere dir die Commit-ID und eine kurze Zusammenfassung der Änderungen. Das reicht normalerweise aus, um den Zweck der Dokumentation zu erfüllen.
In Teams zusammenarbeiten
Wenn du Befehle wie git reset
, rebase
oder commit --amend
auf einem Zweig verwendest, den auch andere benutzen, veränderst du den Commit-Verlauf. Jeder, der die alte Geschichte gezogen hat, wird jetzt mit Konflikten konfrontiert.
Verwende die Rewriting-Befehle also nur in lokalen oder Feature-Zweigen. Wenn du die gemeinsame Geschichte erzwingen oder umschreiben musst, solltest du das deinem Team so früh wie möglich mitteilen.
Fazit
Git gibt dir verschiedene Möglichkeiten, Fehler rückgängig zu machen. Aber zu wissen, wann und wie man jedes Werkzeug einsetzt, unterscheidet selbstbewusste Entwickler von verwirrten.
Wir haben uns angeschaut, wie git reset
in den verschiedenen Modi funktioniert, wann du git revert,
verwenden solltest und warum es wichtig ist, das richtige Werkzeug für deine Situation zu wählen.
Zusammengefasst:
- Vermeide das Umschreiben der Geschichte nach dem Verschieben in gemeinsame Zweige
- Kommuniziere frühzeitig, wenn du Druck ausüben musst
- Verwende
git revert
, um gepushte Commits sicher rückgängig zu machen
Für die nächsten Schritte erfährst duhier, wiedu eine Zusammenführung rückgängig machen kannst. Wenn du die Grundlagen beherrschst und bereit bist, tiefer einzusteigen, schau dir unseren Git-Kurs für Fortgeschrittene an!
Lerne heute die Git-Grundlagen
FAQs
Was macht git reset --soft HEAD~1 eigentlich?
Er verschiebt deinen HEAD-Zeiger um einen Commit zurück, lässt aber alle Änderungen im Staging-Modus. Es ist perfekt, wenn du die Übergabe überarbeiten willst, ohne dass Arbeit verloren geht.
Wann sollte ich git reset --mixed anstelle von --soft verwenden?
Verwende --mixed
, wenn du deine Datei-Änderungen behalten, sie aber aus dem Staging-Bereich entfernen möchtest. Das ist hilfreich, wenn du Änderungen vornehmen willst, bevor du dich erneut verpflichtest.
Ist es gefährlich, git push --force zu verwenden?
Ja, vor allem in einer Teamumgebung. Sie überschreibt die Commit-Historie auf dem entfernten Zweig und kann die Arbeit von Teamkollegen löschen, wenn sie nicht sorgfältig eingesetzt wird.
Was ist der Unterschied zwischen "git revert" und "git reset"?
git revert
fügt einen neuen Commit hinzu, der Änderungen rückgängig macht, ohne die Historie zu berühren, während git reset
den HEAD verschiebt und die Historie verändern kann - besonders riskant, wenn er gepusht wird.
Kann ich eine Übertragung rückgängig machen, ohne meine Änderungen zu verlieren?
Ja, benutze git reset --soft
, um deine Änderungen im Staged-Zustand zu halten, oder --mixed
, um sie in deinem Arbeitsverzeichnis zu halten.
Was ist der sicherste Weg, einen Commit in einem gemeinsamen Repo rückgängig zu machen?
Verwende git revert
. Er bewahrt die Geschichte, indem er einen neuen Commit erstellt, der die Änderungen rückgängig macht und Konflikte mit Teamkollegen vermeidet.
Wie finde ich den Commit, den ich rückgängig machen möchte?
Verwende git log
, um frühere Commits aufzulisten. Kopiere den Commit-Hash des Commits, den du rückgängig machen oder auf den du zurücksetzen möchtest.
Können GUI-Tools wie GitHub Desktop Commits rückgängig machen?
Ja, GUI-Tools bieten benutzerfreundliche Möglichkeiten, Commits rückgängig zu machen, ohne dass man sich die Syntax der Kommandozeile merken muss. Sie sind ideal für Anfänger.
Was passiert mit der Commit-Historie nach einem Reset?
Mit git reset
werden die Commit(s) aus deiner Historie entfernt - es sei denn, sie wurden gepusht. Dann hat die Fernbedienung immer noch eine Aufzeichnung, es sei denn, du drückst sie mit Gewalt.
Ist es okay, einen Commit nach dem Pushen zu ändern?
Nein, nicht ohne Koordination. Das Ändern und anschließende Durchdrücken kann die gemeinsame Arbeit stören. Mache es nur in isolierten Zweigen oder Einzelprojekten.
Srujana ist freiberufliche Tech-Autorin und hat einen vierjährigen Abschluss in Informatik. Das Schreiben über verschiedene Themen wie Data Science, Cloud Computing, Entwicklung, Programmierung, Sicherheit und viele andere ist für sie selbstverständlich. Sie liebt klassische Literatur und erkundet gerne neue Reiseziele.