Übersicht
git stash [push [-m <msg>] [-u]]
git stash pop [<stash>]
git stash list
git stash drop [<stash>]
Beschreibung
Der git stash-Befehl legt uncommitted Änderungen (sowohl im Working Tree als auch im Index) beiseite und setzt den Working Tree in einen sauberen Zustand zurück. Die beiseite gelegten Änderungen werden auf einem Stack gespeichert, den Sie später wiederanwenden können. Stash ist perfekt für Situationen wie "Ich muss Branches wechseln, aber meine Arbeit ist nicht bereit für einen Commit."
Standardmäßig werden untracked Dateien nicht gestasht; übergeben Sie -u (oder --include-untracked), um sie einzubeziehen, und -a, um sogar ignorierte einzubeziehen. Jeder Stash-Eintrag ist ein gewöhnliches Commit-Objekt, adressierbar als stash@{0}, stash@{1} usw.
Im täglichen Einsatz integriert sich git stash eng mit Shell-Aliasen, Editor-Plugins und Continuous Integration. Power-User fügen oft Aliase hinzu, die Flags kombinieren, die sie immer übergeben, oder wickeln den Befehl in Skripte, die Teamkonventionen durchsetzen. Die Ausgabeformatierung kann über Git-Config angepasst werden — Pretty-Formate, Farbschemata und Pager-Verhalten sind alle einstellbar. Wenn etwas schiefgeht, ist der erste Diagnoseschritt üblicherweise, den Befehl erneut mit GIT_TRACE=1 in der Umgebung auszuführen, was die zugrunde liegenden Plumbing-Aufrufe offenlegt. Für ungewöhnliche Situationen öffnet die --help-Ausgabe (git stash --help) die vollständige Manpage mit Details zu jeder Option, einschließlich solcher, die in alltäglichen Workflows selten verwendet werden, aber für Debugging oder Skripting im großen Maßstab essentiell sind.
Zu verstehen, wie git stash mit dem Rest von Gits Datenmodell interagiert — der Objektdatenbank, dem Index, Refs und dem Working Tree — zahlt sich aus. Jeder Befehl operiert auf einer Teilmenge dieser Stücke, und zu wissen, welche er berührt, hilft Ergebnisse vorherzusagen und sich von Fehlern zu erholen. Das Lesen der offiziellen Git-Dokumentation neben praktischer Übung in einem Wegwerf-Repository ist der schnellste Weg, die Nuancen zu verinnerlichen. Die meisten Produktionsprobleme mit Git rühren von einer von drei Ursachen: überraschendem Standardverhalten, partiellen Netzwerkoperationen oder dem Umschreiben bereits geteilter Historie. Ein funktionierendes mentales Modell der Nebenwirkungen von git stash hilft, alle drei zu vermeiden.
Häufige Optionen
| Option / Unterbefehl | Beschreibung |
|---|---|
push -m <msg> | Stash mit beschreibender Nachricht. |
-u | Bezieht untracked Dateien ein. |
-a | Bezieht auch ignorierte Dateien ein. |
list | Zeigt alle Stash-Einträge. |
show [-p] <stash> | Zeigt den Inhalt eines Stashs. |
pop / apply | Wendet einen Stash erneut an; pop löscht ihn auch. |
drop <stash> | Löscht einen Stash-Eintrag. |
branch <name> | Erstellt einen Branch aus einem Stash. |
Beispiele
git stash push -m "WIP: refactor parser"
# Aktuelle Arbeit mit Label speichern
git stash list
# stash@{0}: On main: WIP: refactor parser
git stash pop
# Den jüngsten Stash erneut anwenden und entfernen
git stash branch temp-branch stash@{1}
# Einen neuen Branch aus einem konfliktbehafteten Stash erstellen
Häufige Fehler
Vergessen, dass Stash standardmäßig keine untracked Dateien einbezieht, und sie dann beim Ausführen von git clean verlieren. Verwenden Sie -u. Einen Stash zu poppen, der in Konflikt gerät, kann einen komplizierten Zustand hinterlassen — ziehen Sie zuerst apply in Betracht, sodass der Stash nicht verworfen wird, falls etwas schiefgeht. Lange existierende Stashes häufen sich an; überprüfen Sie regelmäßig mit git stash list.
Verwandte Befehle
git commit, git switch, git restore, git clean