Git Stash: Änderungen zwischenspeichern ohne Commit
Du musst schnell den Branch wechseln, aber deine Arbeit ist noch nicht fertig? Mit git stash legst du Änderungen sicher beiseite und holst sie später zurück.
Du sitzt mitten in einer Änderung, der Code ist halbfertig – und plötzlich musst du dringend auf einen anderen Branch wechseln, um einen Bug zu fixen. Ein Commit wäre jetzt unsauber, weil deine Arbeit noch nicht fertig ist. Genau für diese Situation gibt es git stash: Du legst deine Änderungen auf einen Stapel beiseite, dein Arbeitsverzeichnis wird sauber, und du kannst die Änderungen später jederzeit zurückholen. In diesem Beitrag lernst du, wie der Stash funktioniert und wie du ihn im Alltag souverän einsetzt.
Was genau macht git stash?
Der Befehl git stash nimmt alle nicht committeten Änderungen – sowohl im Arbeitsverzeichnis als auch im Staging-Bereich – und speichert sie an einem separaten Ort. Anschließend setzt Git deinen Arbeitsstand auf den letzten Commit zurück. Deine Änderungen sind nicht verloren, sondern liegen auf einem Stapel (englisch stack), von dem du sie später wieder herunternehmen kannst.
Der Stash funktioniert nach dem Prinzip LIFO (Last In, First Out): Der zuletzt abgelegte Eintrag liegt oben und wird zuerst wieder geholt. Ein typischer Ablauf sieht so aus:
# Du hast Änderungen gemacht, willst sie aber beiseitelegen
git stash
# Dein Arbeitsverzeichnis ist jetzt sauber – wechsle den Branch
git checkout hotfix
# ... Bug fixen, committen ...
# Zurück zu deiner Arbeit und Änderungen wiederherstellen
git checkout feature
git stash popStashes mit Nachricht versehen
Wenn du mehrere Stashes anlegst, verlierst du schnell den Überblick, was sich hinter welchem Eintrag verbirgt. Deshalb solltest du jedem Stash eine aussagekräftige Beschreibung geben. Dafür nutzt du git stash push mit der Option -m:
# Stash mit beschreibender Nachricht anlegen
git stash push -m "Login-Formular: Validierung halbfertig"
# Alle vorhandenen Stashes auflisten
git stash listDie Ausgabe von git stash list könnte dann so aussehen:
stash@{0}: On feature: Login-Formular: Validierung halbfertig
stash@{1}: On main: Experiment mit neuem CachingJeder Eintrag hat einen Index in der Form stash@{n}. Über diesen Index sprichst du einen bestimmten Stash gezielt an, statt immer nur den obersten zu verwenden.
apply oder pop: Was ist der Unterschied?
Es gibt zwei Wege, einen Stash zurückzuholen, und der Unterschied ist wichtig. Mit git stash pop wendest du die Änderungen an und entfernst den Eintrag vom Stapel. Mit git stash apply wendest du die Änderungen an, der Stash bleibt aber erhalten:
# Obersten Stash anwenden und vom Stapel entfernen
git stash pop
# Einen bestimmten Stash anwenden, aber behalten
git stash apply stash@{1}
# Einen behaltenen Stash später manuell löschen
git stash drop stash@{1}Wann nimmst du was? apply ist sicherer, wenn du dieselben Änderungen auf mehreren Branches anwenden möchtest oder dir noch nicht sicher bist, ob alles glattläuft. pop ist praktischer im normalen Alltag, wenn du einen Stash genau einmal brauchst und ihn danach nicht mehr behalten willst.
Nur bestimmte Dateien oder auch neue Dateien stashen
Standardmäßig ignoriert git stash Dateien, die Git noch gar nicht kennt – also neu angelegte, nicht getrackte Dateien. Möchtest du auch diese mitnehmen, brauchst du die Option -u (für untracked):
# Auch nicht getrackte (neue) Dateien mit stashen
git stash push -u -m "Inklusive neuer config.json"
# Nur eine bestimmte Datei stashen, der Rest bleibt im Arbeitsverzeichnis
git stash push -m "Nur das Stylesheet" css/style.cssDas gezielte Stashen einzelner Dateien ist nützlich, wenn du nur einen Teil deiner Arbeit beiseitelegen, am anderen Teil aber weiterarbeiten willst. So bleibt dein Workflow flexibel.
Den Inhalt eines Stash prüfen
Bevor du einen Stash zurückholst, willst du vielleicht wissen, was genau darin steckt. Mit git stash show bekommst du eine Zusammenfassung, mit der Option -p sogar den vollständigen Diff:
# Kurze Übersicht: welche Dateien sind betroffen
git stash show stash@{0}
# Vollständiger Diff mit allen Zeilenänderungen
git stash show -p stash@{0}So vermeidest du böse Überraschungen und kannst sicher sein, dass du den richtigen Eintrag anwendest. Wenn du am Ende aufräumen möchtest, entfernt git stash clear übrigens alle Stashes auf einmal – das ist allerdings nicht umkehrbar, also nutze es mit Bedacht.
Fazit
Der Stash ist ein kleiner, aber sehr nützlicher Helfer im Git-Alltag. Er erlaubt dir, deine Arbeit jederzeit sauber zu unterbrechen, ohne einen halbfertigen Commit erzeugen zu müssen. Merke dir vor allem die Grundlagen: git stash push -m zum Ablegen mit Nachricht, git stash list für den Überblick, sowie pop und apply zum Zurückholen. Sobald du dir angewöhnst, deine Stashes zu beschreiben und mit -u bei Bedarf auch neue Dateien mitzunehmen, wird der Befehl zu einem festen Bestandteil deines Workflows. Probier es beim nächsten spontanen Branch-Wechsel einfach aus – du wirst den Komfort schnell nicht mehr missen wollen.