git stash — Mehr als ein Panik-Speicher (Teilweise Stash, benannte Stashes und der Rest)
Außer dem Notfall-Speichern: benannte Stashes, Stash-Liste, anzeigen mit -p, teilweises Stash mit --patch, Anwenden gegenüber Pop und das Problem mit unverfolgten Dateien, das Sie irgendwann treffen werden.
Sie haben gelernt git stash in Panik. Jemand hat Sie mitten in einer Funktion kontaktiert, Sie mussten sofort einen Branch wechseln, und Stash war die schnellste Lösung. Der Tag wurde gerettet.
Dann hatten Sie drei Stashes, vergaßen, was darin war, gaben den falschen einen auf den falschen Branch und entschieden, Stash sei defekt. Er ist nicht defekt. Sie brauchen nur noch einige zusätzliche Befehle.
Die unverfolgten Dateien haben Sie erwischt (lesen Sie das zuerst)
git stash speichert nur verfolgte Dateien — Dateien, die bereits bekannt sind. Neue Dateien, die noch nicht gestappt wurden, sind für Git unsichtbar.
# You created a new file mid-feature
echo "temp work" > new-feature.js
git stash
# new-feature.js is still sitting there — stash ignored it entirely
Hinzufügen -u um unverfolgte Dateien einzuschließen:
git stash push -u
Es gibt auch -a (--all), die ignorierte Dateien ebenfalls einschließt. Das ist fast nie das, was Sie wollen — es wird Ihre node_modules Änderungen und .env Dateien speichern und die Wiederherstellung zu einem Unheil machen.
Nennen Sie Ihre Stashes vor dem Sie es bereuen
Die Standardmeldung für Stash lautet:
stash@{0}: WIP on main: a3f1c2d Update dependencies
Das ist sinnlos, wenn Sie drei Stashes aus drei verschiedenen halbfertigen Funktionen haben. Verwenden Sie git stash push -m um sie zu benennen:
git stash push -u -m "wip: oauth token refresh flow"
git stash push -u -m "experiment: lazy load images on scroll"
git stash push -u -m "fix: header z-index issue"
Jetzt git stash list ist tatsächlich lesbar:
stash@{0}: On main: fix: header z-index issue
stash@{1}: On feature/images: experiment: lazy load images on scroll
stash@{2}: On feature/auth: wip: oauth token refresh flow
Wenden Sie einen bestimmten durch Index an:
git stash apply stash@{2} # brings back the auth work
Prüfen Sie vor der Anwendung: stash show -p
git stash show gibt Ihnen eine Zusammenfassung der geänderten Dateien. Fügen Sie -p für den vollständigen Diff hinzu:
git stash show -p stash@{2}
Dies ist der Befehl, den die meisten Menschen überspringen und dann bereuen. Ohne ihn werden Sie blind Änderungen auf einen Branch wiederherstellen, der seit der Stash erheblich verändert wurde. Ein schneller show -p erfordert zehn Sekunden und zeigt Ihnen genau, was Sie gerade wiederherstellen.
Wenn Sie die Stash-Diff mit dem aktuellen Zustand einer Datei seitlich vergleichen möchten, fügen Sie beide in das Textvergleich Tool ein — schneller als in Ihrem Kopf zu verarbeiten. git diff stash@{N}..HEAD -- path/to/file Anwenden vs. Pop: ein Unterschied, der tatsächlich wichtig ist
apply vs pop: ein Unterschied, der tatsächlich wichtig ist
Beide Befehle wiederherstellen Ihren Stash. Ein kritischer Unterschied:
git stash pop= anwenden + Löschen der Stash-Eintraggit stash apply= anwenden, behalten Sie die Stash-Eintrag
Wenn Sie pop und stoßen auf einen Merge-Konflikt, entfernt Git die Stash-Eintrag, bevor Sie etwas gelöst haben. Jetzt haben Sie ein konfliktreiches Arbeitsverzeichnis und keine Stash-Referenz, um zurückzugehen.
apply behält die Eintrag während Sie den Konflikt lösen, dann bereinigen Sie manuell:
# Safer workflow when conflicts are possible
git stash apply stash@{0}
# resolve any conflicts
git stash drop stash@{0} # explicit cleanup once you're happy
Die zusätzliche drop Schritt lohnt sich, wenn der Stash Stunden Arbeit darstellt.
Teilweise Stash mit –patch
Manchmal möchten Sie nur einen Teil Ihrer Änderungen stappen. Sie haben eine Bug-Fix und die Hälfte eines neuen Features in derselben Datei, und Sie möchten den Fix beibehalten und das Feature-Code stappen.
git stash push --patch (oder -p) öffnet eine interaktive Sitzung hunk für hunk:
git stash push -p -m "wip: new feature half"
Für jeden Hunk erhalten Sie die gleiche y/n/s/q Interaktion wie git add -p. Geben Sie s ein, um einen Hunk in kleinere Teile zu teilen, wenn die automatische Aufteilung nicht fein genug ist. Es ist langsamer als ein einfacher Stash, aber es ist die sauberste Methode, um einen unordentlichen Arbeitsverzeichnis ohne Erstellung eines temporären Branches zu teilen.
Ein Nachteil: --patch Modus beinhaltet keine unverfolgten Dateien, daher können Sie es nicht mit -ukombinieren. Wenn Sie neue unverfolgte Dateien haben, die Teil des Features sind, das Sie stappen, müssen Sie sie git add zuerst machen, damit sie verfolgt werden, und dann führen Sie den teilweisen Stash aus.
Echte Anwendungsfälle
Context-Switching mitten in einer Funktion. Ein Reviewer hinterlässt dringende Rückmeldungen auf einem anderen PR, während Sie tief in unvollendeten Code sind. Stash mit einem Namen, wechseln Sie den Branch, führen Sie die Review durch, kehren Sie zurück und poppen Sie. Keine WIP-Commits, keine Branch-Übung.
git stash push -u -m "wip: refactor auth middleware"
git checkout fix/urgent-prod-bug
# ... review and fix ...
git checkout feature/auth-refactor
git stash pop
Überprüfung eines sauberen Testlaufs. Sie möchten bestätigen, dass Ihre Tests auf einem sauberen Arbeitsverzeichnis erfolgreich sind — nicht mit Ihren halbfertigen Änderungen, die versehentlich in die Testumgebung gelangen:
git stash push -u
npm test # or pytest, cargo test, whatever
git stash pop
Dies erfasst den Fall, dass Tests nur dann erfolgreich sind, weil lokale Änderungen vorliegen. Das tritt häufiger auf als man denkt, besonders in Repos mit gemeinsamen Testvorlagen.
Wechseln von Branchen mit einem konfliktsicheren, unordentlichen Arbeitsverzeichnis. Git lehnt ab, einen Branch zu überprüfen, wenn Ihr Arbeitsverzeichnis Änderungen hat, die überschrieben würden. Stash zuerst, wechseln Sie, unstash. Schneller als git commit --fixup nur, um Branchen zu wechseln.
git stash Cheat Sheet
| Befehl | Was es tut |
|---|---|
git stash push | Stappt verfolgte Änderungen (Kürzel: git stash) |
git stash push -u | Einschließen unverfolgter Dateien |
git stash push -m "name" | Stappt mit einem beschreibenden Namen |
git stash push -u -m "name" | Unverfolgt + benannt (die Kombination, die Sie am häufigsten verwenden) |
git stash push -p | Interaktive teilweise Stash (hunk für hunk) |
git stash list | Liste alle Stashes |
git stash show stash@{N} | Zusammenfassung der geänderten Dateien in einem Stash |
git stash show -p stash@{N} | Vollständiger Diff eines Stash |
git stash apply stash@{N} | Wenden Sie einen Stash an und behalten Sie die Eintrag |
git stash pop | Wenden Sie den neuesten Stash an und löschen Sie die Eintrag |
git stash drop stash@{N} | Löschen einer bestimmten Stash-Eintrag |
git stash clear | Löschen aller Stash-Einträge |
git stash branch <branchname> | Erstellen Sie einen neuen Branch aus einem Stash und wenden Sie ihn an |
Die Stash-Branch-Fluchtmöglichkeit
Ein weiterer Befehl, den Sie kennen sollten: git stash branch <branchname>. Dies erstellt einen neuen Branch an dem Commit, an dem Sie gestappt haben, wendet den Stash an und entfernt ihn, wenn die Anwendung sauber ist. Es ist die richtige Entscheidung, wenn Ihre gestappten Änderungen groß genug geworden sind, um ihren eigenen Branch zu verdienen — und es vermeidet das Konfliktproblem vollständig, weil Sie den Stash genau auf dem Tree wiedergeben, an dem er kam.
Das Gewohnheitsverhalten, das 90% von Stash-Problem löst: Nennen Sie alles mit -mund verwenden Sie apply anstatt pop bis Sie sicher sind, dass die Änderungen sauber integriert wurden. Der zusätzliche drop Schritt kostet zwei Sekunden. Verlieren Sie einen Stash, den Sie brauchten, kostet viel mehr.
Das könnte Ihnen auch gefallen
Erweiterungen installieren
IO-Tools zu Ihrem Lieblingsbrowser hinzufügen für sofortigen Zugriff und schnellere Suche
恵 Die Anzeigetafel ist eingetroffen!
Anzeigetafel ist eine unterhaltsame Möglichkeit, Ihre Spiele zu verfolgen. Alle Daten werden in Ihrem Browser gespeichert. Weitere Funktionen folgen in Kürze!
Unverzichtbare Tools
Alle Neuheiten
AlleAktualisieren: Unser neuestes Werkzeug wurde am 15. Juni 2026 hinzugefügt
