Im Git-Alltag passiert es schnell:
Man probiert etwas aus, ändert ein paar Dateien merkt dann aber, dass man diese Änderungen doch nicht behalten möchte.
Die Frage lautet dann:
Wie kann ich unstaged Änderungen in Git verwerfen, ohne Commits oder gestagte Änderungen zu verlieren?
Die empfohlene Lösung: git restore
Seit neueren Git-Versionen ist git restore der richtige Befehl, um Änderungen im Working Tree zurückzusetzen.
Alle unstaged Änderungen verwerfen
git restore .
Was passiert dabei:
- alle unstaged Änderungen im aktuellen Verzeichnis werden verworfen
- der Stand entspricht wieder dem letzten Commit
- gestagte Änderungen bleiben unangetastet
Einzelne Datei zurücksetzen
Wenn du nur eine bestimmte Datei zurücksetzen möchtest:
git restore path/to/file
Beispiel:
git restore src/config.js
Nur diese Datei wird auf den letzten Commit-Stand zurückgesetzt.
Wichtig: Unterschied zwischen staged und unstaged
Wenn eine Datei sowohl staged als auch unstaged Änderungen enthält, gilt:
-
git restoreverwirft nur die unstaged Änderungen - Änderungen, die bereits mit
git addgestaged wurden, bleiben erhalten
Zur Einordnung:
-
git diff→ zeigt unstaged Änderungen -
git diff --staged→ zeigt staged Änderungen
git restore betrifft nur das, was in git diff sichtbar ist.
Warum nicht mehr git checkout?
Früher wurde oft folgender Befehl verwendet:
git checkout -- .
Dieser funktioniert zwar noch, ist aber nicht mehr empfohlen.
Mit git restore und git switch hat Git die überladene Funktion von git checkout bewusst aufgeteilt:
-
git switch→ Branches wechseln -
git restore→ Dateien zurücksetzen
Das macht Git-Befehle klarer und weniger fehleranfällig.
Achtung
git restore verwirft Änderungen endgültig.
Nicht gestagte Änderungen lassen sich danach nicht wiederherstellen.
Wenn du dir unsicher bist, sichere die Änderungen vorher:
git stash
Fazit
Unstaged Änderungen zu verwerfen ist mit git restore einfach und kontrolliert möglich für einzelne Dateien oder das gesamte Working Directory. Anderes Thema: Bereits getrackte Datei ignorieren