git stash

Branches & Merges

Die Änderungen eines geänderten Arbeitsverzeichnisses beiseitelegen


Der Befehl 'git stash' nimmt deine nicht committeten Änderungen (gestagt und ungestagt), legt sie für später beiseite und setzt deine Arbeitskopie zurück. Mit 'git stash pop' oder 'git stash apply' wendest du sie später wieder an. Stashen ist nützlich, wenn du schnell den Kontext wechseln und an etwas anderem arbeiten musst, aber mitten in einer Änderung steckst, die noch nicht committet werden kann. Der Stash ist ein Stapel, du kannst also mehrere Stashes haben.

Syntax

git stash list [<log-options>]
git stash show [-u | --include-untracked | --only-untracked] [<diff-options>] [<stash>]
git stash drop [-q | --quiet] [<stash>]
git stash pop [--index] [-q | --quiet] [<stash>]
git stash apply [--index] [-q | --quiet] [<stash>]
git stash branch <branchname> [<stash>]
git stash [push [-p | --patch] [-S | --staged] [-k | --[no-]keep-index] [-q | --quiet] [-u | --include-untracked] [-a | --all] [(-m | --message) <message>] [--] [<pathspec>...]]
git stash clear
[ ] optional| oder<arg> Platzhalter... wiederholbar--flag Option

Optionen

Klicke auf eine Option, um sie aufzuklappen

Einsteiger (7)

Deine lokalen Änderungen in einem neuen Stash-Eintrag sichern und auf HEAD zurücksetzen. Mit -m fügst du eine aussagekräftige Nachricht hinzu. Das ist die Standardaktion von 'git stash'.

EmpfohlenMit -m verwenden, damit jeder Stash später erkennbar ist

Beispiel

git stash push -m "Work in progress"

Den neuesten Stash (stash@{0}) auf dein Arbeitsverzeichnis anwenden und vom Stapel entfernen. Gibt es beim Anwenden Konflikte, bleibt der Eintrag erhalten, damit du lösen und ihn selbst löschen kannst.

EmpfohlenStellt den neuesten Stash wieder her und entfernt ihn; bleibt bei Konflikten erhalten

Beispiel

git stash pop

Einen Stash anwenden, ohne ihn vom Stapel zu entfernen. Anders als bei pop bleibt der Stash verfügbar. Mit stash@{n} wählst du einen bestimmten.

Bei BedarfWenn du denselben Stash noch einmal oder auf mehreren Branches brauchst

Beispiel

git stash apply stash@{1}

Alle Stash-Einträge auflisten. Jeder Eintrag zeigt seinen Index (stash@{n}), den Branch, auf dem er entstand, und die Nachricht bzw. Commit-Beschreibung.

EmpfohlenPrüfe den Stash-Inhalt, bevor du poppst oder löschst

Beispiel

git stash list

Die in einem Stash-Eintrag gespeicherten Änderungen als Diff anzeigen. Standardmäßig stash@{0}. Mit -p siehst du den vollständigen Patch.

EmpfohlenVor dem Anwenden mit -p ansehen

Beispiel

git stash show -p stash@{0}

Einen einzelnen Stash-Eintrag vom Stapel entfernen. Ohne Argumente wird stash@{0} gelöscht. Mit stash@{n} löschst du einen bestimmten. Merk dir den ausgegebenen Hash – er ist der einzige einfache Weg zur Wiederherstellung.

Bei BedarfNach apply aufräumen; merk dir den ausgegebenen Hash, falls du ihn zurückbrauchst

Beispiel

git stash drop stash@{1}

ALLE Stash-Einträge auf einmal ohne Rückfrage entfernen. Retten lassen sie sich nur, indem man mit git fsck verwaiste Commits sucht. Mit äußerster Vorsicht nutzen.

Nicht empfohlenLöscht alle Stashes auf einmal, ohne Rückfrage

Beispiel

git stash clear

Fortgeschritten (3)

Unverfolgte Dateien in den Stash aufnehmen. Standardmäßig sichert git stash nur verfolgte Dateien. So stashst du auch neue, noch nicht hinzugefügte Dateien.

EmpfohlenOhne die Option bleiben neue, nicht getrackte Dateien zurück

Beispiel

git stash -u

Den Staging-Bereich unangetastet lassen. Nur ungestagte Änderungen werden aus dem Arbeitsverzeichnis entfernt; gestagte bleiben gestagt (der Stash hält sie trotzdem fest).

Bei BedarfGestagte Arbeit testen oder committen, während der Rest beiseiteliegt

Beispiel

git stash -k

Einen neuen Branch ab dem Commit anlegen, auf dem der Stash entstand, den Stash anwenden und ihn bei Erfolg löschen. Nützlich, wenn der Stash mit dem aktuellen Branch kollidiert.

Bei BedarfBeste Lösung, wenn sich ein Stash nicht mehr sauber auf den aktuellen Branch anwenden lässt

Beispiel

git stash branch new-feature stash@{0}

Erfahren (1)

Interaktiv Hunks zum Stashen auswählen. So stashst du nur bestimmte Teile deiner Änderungen und behältst andere im Arbeitsverzeichnis.

Bei BedarfNur ausgewählte Hunks stashen

Beispiel

git stash -p

Die richtige Option wählen

Gestashte Änderungen wiederherstellen

Den passenden Befehl wählen, um deine gestashte Arbeit zurückzuholen

BefehlBehält Stash?Wirkt aufBei Konflikt
git stash popNein – nach dem Anwenden entferntAktueller BranchStash bleibt, Konflikt lösen
git stash applyJa – bleibt im StapelAktueller BranchStash bleibt, Konflikt lösen
git stash branch <name>Nein – nach dem Anwenden entferntNeuer Branch an der Stash-BasisKeine Konflikte (frischer Branch)

Was wird gestasht?

Steuern, welche Dateien in deinen Stash kommen

BefehlVerfolgte geänderteGestagtUnverfolgtIgnorierte
git stashJaJaNoNo
git stash -uJaJaJaNo
git stash -aJaJaJaJa
git stash -kJaJa (und bleiben auch gestagt)NoNo

Stash und andere Sicherungswege

Wann Stash und wann Alternativen

BefehlWo es liegtTeilbarAm besten für
git stashLokales ReflogNoSchneller Kontextwechsel, vorübergehende Sicherung
git commit (WIP)Branch-HistorieJa (wenn gepusht)Arbeit, die du vielleicht teilen oder nachschlagen willst
git worktreeSeparates VerzeichnisN/AAn mehreren Branches gleichzeitig arbeiten

Mehrere Stashes verwalten

Befehle für den Stash-Stapel

BefehlZeigt InhaltÄndert StapelAnwendungsfall
git stash listIndex + NachrichtNoAlle Stashes sehen
git stash showDiffstatNoSchneller Blick auf die Änderungen
git stash show -pVollständiger DiffNoGenaue Prüfung vor dem Anwenden
git stash dropNoJa (entfernt einen)Bestimmten Stash löschen
git stash clearNoJa (entfernt ALLE)Neu anfangen (gefährlich)

Beispiele

Aktuelle Änderungen stashen

git stash

Sichert alle nicht committeten Änderungen (gestagt und ungestagt) auf dem Stash-Stapel und setzt das Arbeitsverzeichnis auf HEAD zurück.


Stash mit aussagekräftiger Nachricht

git stash push -m "WIP: login feature"

Stasht Änderungen mit eigener Nachricht, damit du sie bei mehreren Stashes leichter wiederfindest.


Neuesten Stash anwenden und entfernen

git stash pop

Wendet den neuesten Stash (stash@{0}) auf dein Arbeitsverzeichnis an und entfernt ihn vom Stapel.


Alle Stashes auflisten

git stash list

Zeigt alle Stash-Einträge mit Index, Branch-Name und Nachricht. Nützlich bei mehreren Stashes.

Workflow-Beispiele

1
git stash

Aktuelle Änderungen in den Stash legen

2
git checkout other-branch

Auf den anderen Branch wechseln

3
(do work, commit if needed)

Die dringende Arbeit erledigen

4
git checkout original-branch

Zu deinem Branch zurückkehren

5
git stash pop

Die gestashten Änderungen wiederherstellen

1
git stash push -m "WIP: login validation"

Stash mit aussagekräftiger Nachricht

2
(days later...)

Zeit vergeht

3
git stash list

Alle Stashes mit Nachrichten ansehen

4
git stash show stash@{0}

Vorschau des Stash-Inhalts

5
git stash pop

Anwenden und entfernen, wenn du so weit bist

1
git stash

Deine Änderungen stashen

2
git checkout branch-a

Auf den ersten Branch wechseln

3
git stash apply

Anwenden (behält den Stash)

4
git commit -m "Add feature"

Auf branch-a committen

5
git checkout branch-b

Auf den zweiten Branch wechseln

6
git stash apply

Denselben Stash erneut anwenden

7
git stash drop

Danach aufräumen

1
git add ready-file.js

Die fertigen Änderungen stagen

2
git stash -k

Ungestagtes stashen, Gestagtes behalten

3
git commit -m "Ready feature"

Die gestagten Änderungen committen

4
git stash pop

Den Rest deiner Arbeit wiederherstellen

Fehlerbehebung

error: Your local changes to the following files would be overwritten by merge

Ursache: Einen Stash anwenden wollen, der mit dem aktuellen Arbeitsverzeichnis kollidiert

Committe oder stashe zuerst die aktuellen Änderungen, oder lege mit 'git stash branch <name>' aus dem Stash einen neuen Branch an

No stash entries found

Ursache: Der Stash-Stapel ist leer, oder du schaust auf den falschen Index

Führe 'git stash list' aus, um die vorhandenen Stashes zu sehen. Denk daran: stash@{0} ist der neueste.

Stash hat meine neuen Dateien nicht gesichert

Ursache: Standardmäßig sichert git stash nur verfolgte Dateien

Nutze 'git stash -u', um unverfolgte Dateien einzuschließen, oder 'git stash -a' für zusätzlich ignorierte Dateien

Falschen Stash angewendet / pop rückgängig machen

Ursache: Versehentlich den falschen Stash-Eintrag gepoppt

Ist pop an Konflikten gescheitert, ist der Stash noch da. Hat es geklappt, liegen deine Änderungen im Arbeitsverzeichnis – stashe bei Bedarf einfach erneut mit 'git stash'

Stash nach clear/drop verloren

Ursache: git stash clear/drop löscht Stash-Einträge endgültig

Versuche 'git fsck --unreachable | grep commit' und dann 'git show <hash>', um verlorene Stash-Commits zu finden. Rettung nicht garantiert.

Tipps & Stolperfallen

Best Practices

  • ✓Nutze immer aussagekräftige Nachrichten mit 'git stash push -m "description"' – du wirst es dir später danken
  • ✓Nutze lieber 'git stash apply' statt 'git stash pop', wenn du den Stash vielleicht noch brauchst
  • ✓Nutze 'git stash -u', wenn du neue unverfolgte Dateien sichern willst
  • ✓Lass keine Stashes auflaufen – räume alte regelmäßig mit 'git stash drop' auf
  • ✓Für längeres Aufbewahren lieber einen WIP-Commit statt eines Stash anlegen
  • ✓Nutze 'git stash show -p', um den Inhalt eines Stash vor dem Anwenden zu prüfen
  • ✓Scheitert stash pop an Konflikten, bleibt der Stash erhalten – löse die Konflikte und lösche ihn dann von Hand

Häufige Fehler

  • ✗Vergessen, dass 'git stash' standardmäßig nur verfolgte Dateien sichert. Nutze '-u' oder '--include-untracked', um neue unverfolgte Dateien mitzustashen.
  • ✗'git stash pop' nutzen, obwohl du denselben Stash vielleicht auf mehrere Branches anwenden willst. Nutze stattdessen 'git stash apply', um den Stash zu behalten.
  • ✗Stashes keine aussagekräftigen Nachrichten geben und dann vergessen, was in welchem steckt. Nutze immer 'git stash push -m "description"'.
  • ✗'git stash clear' ausführen, ohne zu merken, dass es ALLE Stashes ohne Rückfrage löscht. Retten lassen sie sich nur, indem man mit 'git fsck' verwaiste Commits ausgräbt.
  • ✗Die Reihenfolge des Stapels verwechseln: stash@{0} ist der NEUESTE Stash, nicht der älteste.

FAQ

A:

Pop wendet den Stash an UND entfernt ihn vom Stapel. Apply wendet ihn nur an und lässt ihn verfügbar. Nutze apply, wenn du denselben Stash vielleicht noch woanders brauchst.

A:

Standardmäßig sichert Stash nur verfolgte Dateien. Nutze 'git stash -u', um unverfolgte Dateien einzuschließen, oder 'git stash -a' für zusätzlich ignorierte Dateien.

A:

Nutze 'git stash show' für eine kurze Übersicht oder 'git stash show -p' für den vollständigen Diff. Mit stash@{n} siehst du einen bestimmten Stash.

A:

Ja! Nutze 'git stash push -m "message" -- file1.js file2.js', um nur bestimmte Dateien zu stashen, oder 'git stash -p', um Hunks interaktiv auszuwählen.

A:

Bei Konflikten wird der Stash NICHT entfernt. Löse die Konflikte von Hand und entferne den Stash danach mit 'git stash drop'.

A:

Stashes sind branchunabhängig. Checke einfach den Ziel-Branch aus und führe 'git stash apply' aus. Oder nutze 'git stash branch <name>', um einen neuen Branch anzulegen.