Git Reset
Zuletzt aktualisiert
git reset verschiebt den aktuellen Branch auf einen anderen Commit und aktualisiert je nach Modus die Staging-Area (Index) und den Arbeitsbaum entsprechend. Die drei Modi unterscheiden sich nur darin, wie weit diese Aktualisierung reicht: --soft verschiebt den Branch und stoppt, --mixed (die Voreinstellung) setzt auch die Staging-Area zurück, und --hard überschreibt zusätzlich deine Arbeitsdateien.
Da --hard nicht committete Arbeit verwirft, solltest du wissen, welchen Modus du willst, bevor du ihn ausführst. Probiere diese Befehle sicher im Terminal-Playground aus - eine echte Shell in deinem Browser.
Die drei Modi
| Mode | Moves branch | Resets staging | Resets working tree |
|---|---|---|---|
--soft | Ja | Nein | Nein |
--mixed (default) | Ja | Ja | Nein |
--hard | Ja | Ja | Ja |
Syntax
| Command | What it does |
|---|---|
git reset --soft HEAD~1 | Letzten Commit rückgängig machen, Änderungen gestaged lassen |
git reset HEAD~1 | Letzten Commit rückgängig machen, Änderungen ungestaged lassen |
git reset --hard HEAD~1 | Letzten Commit rückgängig machen, Änderungen verwerfen |
git reset <file> | Eine Datei unstagen (ihre Änderungen behalten) |
git reset --hard origin/main | Lokalen Branch erzwingen, dem Remote zu entsprechen |
Häufige Fälle
| Goal | Command |
|---|---|
| Alles unstagen | git reset |
| Eine Datei unstagen | git reset README.md |
| 3 Commits zurückgehen, die Arbeit behalten | git reset --soft HEAD~3 |
| Alle lokalen Änderungen seit einem Commit verwerfen | git reset --hard <hash> |
Git reset FAQ
Was ist der Unterschied zwischen --soft, --mixed und --hard?
--soft ändert nichts weiter, deine Änderungen bleiben also gestaged. --mixed (die Voreinstellung) leert zusätzlich die Staging-Area, sodass die Änderungen ungestaged werden, aber in deinen Dateien bleiben. --hard überschreibt zusätzlich deinen Arbeitsbaum, damit er dem Ziel-Commit entspricht, und verwirft nicht committete Änderungen.Wie stage ich eine Datei mit git reset aus?
git reset <file> aus (zum Beispiel git reset README.md), oder git reset ohne Pfad, um alles zu unstagen. Das entfernt die Datei aus der Staging-Area, behält aber deine Bearbeitungen im Arbeitsbaum. In neueren Git-Versionen kannst du auch git restore --staged <file> verwenden, was dasselbe expliziter erledigt.Ist git reset --hard umkehrbar?
--hard verwirft nicht committete Änderungen dauerhaft. Committete Arbeit, die du weggeresettet hast, kann jedoch meist wiederhergestellt werden: Führe git reflog aus, um den Hash des Commits zu finden, dann git reset --hard <hash> (oder erstelle dort einen Branch). Nicht committete Änderungen, die nie gestaged oder committet wurden, können nicht wiederhergestellt werden, also verwende --hard mit Vorsicht.Was ist der Unterschied zwischen git reset und git revert?
git reset schreibt die Historie um, indem es den Branch zurücksetzt - in Ordnung für lokale Commits, aber gefährlich bei Commits, die du bereits gepusht hast. git revert lässt die Historie unangetastet und fügt einen neuen Commit hinzu, der einen früheren rückgängig macht, was die sichere Wahl für geteilte Branches ist.Kann ich das online üben?
git reset in einer echten Shell in deinem Browser auszuführen - nichts zu installieren. Coddys kostenloser interaktiver Git-Kurs behandelt ebenfalls das Zurücksetzen und Rückgängigmachen von Änderungen Schritt für Schritt.