Git Stash verstehen: Temporäres Speichern von Änderungen in Git
Mit dem Befehl git stash
können Entwickler nicht übertragene Änderungen im Arbeitsverzeichnis vorübergehend sichern. Das ist besonders nützlich, wenn man ohne Commit zu einem anderen Branch oder einer Aufgabe wechseln muss. Git speichert dabei sowohl gestagte als auch ungestagte Änderungen in einem Stapel und entfernt sie aus der Arbeitskopie, sodass sie später wiederhergestellt werden können.
Diese Anleitung zeigt, wie man git stash
verwendet, um den Fortschritt zu sichern, Stashes wiederherzustellen oder zu verwerfen, nicht getrackte Dateien einzubeziehen und mehrere gesicherte Zustände effizient zu verwalten.
Vergleich: git stash vs. git commit
Funktion | Git Stash | Git Commit |
---|---|---|
Zweck | Sichert Änderungen vorübergehend ohne Commit | Speichert Änderungen dauerhaft im Repository |
Anwendungsfall | Beim Unterbrechen einer Aufgabe oder Branch-Wechsel | Wenn Änderungen abgeschlossen und bereit für den Verlauf sind |
Verlauf betroffen | Nein | Ja – wird dem Projektverlauf hinzugefügt |
Ungetrackte Dateien | Optional mit z. B. --include-untracked |
Ja, sobald mit git add hinzugefügt |
Wiederherstellung | Kann erneut angewendet oder gelöscht werden | Kann rückgängig gemacht oder zurückgesetzt werden, ist aber dauerhaft |
Standardbefehl | git stash |
git commit -m "Nachricht" |
Schnellstart
Verwende diese Befehle für typische Stash-Vorgänge:
# Alle aktuellen Änderungen sichern
$ git stash
# Mit Beschreibung sichern
$ git stash push -m "Work in progress"
# Alle Stashes anzeigen
$ git stash list
# Letzten Stash anwenden und entfernen
$ git stash pop
# Bestimmten Stash entfernen
$ git stash drop stash@{1}
# Alle Stashes löschen
$ git stash clear
Befehlssyntax im Überblick
git stash [OPTIONEN]
- save: Speichert gestagte und ungestagte Änderungen im Stapel
- pop: Wendet den neuesten Stash an und entfernt ihn
- apply: Wendet den neuesten Stash an, behält ihn aber im Stapel
- list: Zeigt alle gespeicherten Stashes an
- show: Zeigt Zusammenfassung oder Diff eines Stashs
- drop: Entfernt einen bestimmten Stash
Wichtige git stash Befehle
Alle offenen Änderungen sichern
$ git stash
Speichert sämtliche Änderungen und setzt das Verzeichnis auf den letzten Commit zurück.
Stash mit Beschreibung erstellen
$ git stash push -m "message"
Fügt dem Stash eine Beschreibung zur späteren Identifikation hinzu.
Ungetrackte Dateien einschließen
$ git stash -u
Erfasst sowohl getrackte als auch ungetrackte Dateien.
Alle Stashes anzeigen
$ git stash list
Listet alle Stashes mit Referenzen wie stash@{0}
auf.
Stash-Übersicht anzeigen
$ git stash show
Unterschiede im Stash vollständig anzeigen
$ git stash show -p
Letzten Stash anwenden
$ git stash apply
Letzten Stash anwenden und entfernen
$ git stash pop
Branch aus einem Stash erstellen
$ git stash branch <branch-name>
Erklärung häufiger Optionen
- -u oder –include-untracked: Erfasst ungetrackte Dateien zusätzlich
- -m: Ermöglicht das Hinzufügen einer Nachricht zum Stash
- -p: Aktiviert interaktives Stashen einzelner Codeabschnitte
Mehrere Stashes verwalten
Bei paralleler Arbeit an mehreren Aufgaben speichert Git Stashes als Stapel (stash@{n}
), wobei n = 0
die aktuellste Version ist. Die folgenden Befehle helfen, gezielt mit einzelnen Einträgen zu arbeiten:
Alle Stashes anzeigen
$ git stash list
Bestimmten Stash anwenden
$ git stash apply stash@{n}
Bestimmten Stash entfernen
$ git stash drop stash@{n}
Alle Stashes löschen
$ git stash clear
Warnung: git stash clear
löscht alle gespeicherten Stashes dauerhaft und kann nicht rückgängig gemacht werden. Überprüfe vorher deine Liste!
Beispielhafte Arbeitsweise
So gehst du beim Arbeiten mit Stashes vor:
Dateien ändern
$ echo "<h1>Header</h1>" > index.html
$ echo "console.log('Debug');" > app.js
Stash mit Beschreibung speichern
$ git stash push -m "UI update: Header and debug script"
Ausgabe: Arbeitsverzeichnis mit Beschreibung gespeichert.
Weitere Änderungen vornehmen und erneut stashen
$ echo "<footer>Footer</footer>" >> index.html
$ git stash push -m "Added footer component"
Stash-Liste überprüfen
$ git stash list
Ausgabe:
stash@{0}
: Added footer componentstash@{1}
: UI update: Header and debug script
Älteren Stash anwenden
$ git stash apply stash@{1}
Die Änderungen aus stash@{1}
werden wiederhergestellt, bleiben aber in der Liste erhalten.
Verwendeten Stash löschen
$ git stash drop stash@{1}
Die Ausgabe bestätigt die erfolgreiche Löschung des angegebenen Stash-Eintrags.
Git Stash bereinigen
Wenn du häufig Aufgaben unterbrichst, kann deine Stash-Liste schnell wachsen. Um den Überblick zu behalten, bietet Git Befehle, um einzelne oder alle Einträge zu entfernen. Nachfolgend findest du eine sichere Vorgehensweise zur Bereinigung deiner Stashes.
Befehlsübersicht
Einzelnen Stash löschen:
$ git stash drop stash@{n}
Entfernt den Stash mit Index stash@{n}
, ohne andere Einträge zu beeinflussen.
Letzten Stash entfernen:
$ git stash drop
Ohne Indexangabe wird stash@{0}
gelöscht.
Alle Stashes entfernen:
$ git stash clear
Warnung: git stash clear
löscht alle Einträge unwiderruflich. Prüfe vorher deine Liste.
Beispiel für saubere Bereinigung
Nutze diesen Ablauf, um Stashes gezielt anzuwenden, zu committen und zu löschen:
Stashes anzeigen:
$ git stash list
Beispielausgabe:
stash@{0}
: On main: Recent component stylingstash@{1}
: On main: API endpoint integrationstash@{2}
: On dashboard-feature: Error handling fix
Älteren Stash anwenden und löschen:
$ git stash pop stash@{2}
Wendet stash@{2}
an und entfernt ihn aus der Liste.
Änderungen committen:
$ git commit -am "Fix error handling in authentication flow"
Weiteren Stash entfernen:
$ git stash drop stash@{1}
Hinweis: Nach dem Löschen eines Eintrags werden alle weiteren neu nummeriert.
Alle Stashes löschen:
$ git stash clear
Ungetrackte oder ignorierte Dateien stashen
Standardmäßig sichert git stash
nur Änderungen an getrackten Dateien. Um auch neue oder ignorierte Dateien zu speichern, verwende spezielle Flags.
Ungetrackte Dateien einbeziehen
$ git stash push -u
Sichert alle Änderungen, inklusive nicht hinzugefügter Dateien.
Alles stashen (inkl. ignorierte Dateien)
$ git stash push -a
Warnung: Damit werden auch Build-Artefakte und Abhängigkeiten gesichert. Nur mit Vorsicht verwenden.
Stash mit ungetrackten Dateien inspizieren
$ git stash show -p -u stash@{0}
Beispiel: Ungetrackte Dateien stashen und wiederherstellen
Status im Arbeitsverzeichnis prüfen
$ git status
Beispielausgabe:
user-profile.html
wurde verändertlogin-validation.js
ist ungetrackt
Alle Dateien stashen (inkl. ungetrackter)
$ git stash push -u -m "WIP: Auth validation script"
Arbeitsverzeichnis ist sauber
$ git status
Erwartete Ausgabe: nichts zu committen, Arbeitsbaum ist sauber.
Gespeicherte Änderungen zurückholen
$ git stash pop
Beispielausgabe:
- Datei geändert:
user-profile.html
- Ungetrackte Datei:
login-validation.js
- Entfernter Eintrag:
refs/stash@{0}
Fazit
Diese Anleitung zeigt dir, wie du mit git stash
effektiv Zwischenschritte sicherst, mehrere Stashes verwaltest und auch ungetrackte bzw. ignorierte Dateien nicht verlierst. Ob für einen sauberen Arbeitsstand oder zum Kontextwechsel – Stashing hält deinen Code sauber und flexibel.