Was ist Git Stash?
Sie sind mitten in der Entwicklung eines Features, als etwas Dringendes auftaucht. Ein Bug muss auf dem Haupt-Branch behoben werden, oder ein Kollege braucht Sie für ein Code-Review seiner Pull Request. Sie sind noch nicht bereit, Ihre laufende Arbeit zu committen, aber Sie können nicht die Branch wechseln, wenn uncommittete Änderungen Ihr Arbeitsverzeichnis belegen. Genau dieses Problem wurde git stash entwickelt zu lösen.
Git stash nimmt Ihre uncommitteten Änderungen -- sowohl im Staging befindliche als auch nicht im Staging befindliche -- und speichert sie in einem temporären Speicherbereich. Ihr Arbeitsverzeichnis kehrt in einen sauberen Zustand zurück, der dem letzten Commit entspricht. Wenn Sie bereit sind, können Sie diese Änderungen zurückholen. Stellen Sie es sich so vor, als würden Sie Ihre Arbeit auf ein Regal legen, um sich um etwas anderes zu kümmern, und sie dann genau dort wieder aufnehmen, wo Sie aufgehört haben.
Grundlegende Verwendung: Stash, Apply und Pop
Änderungen im Stash speichern
Die einfachste Form ist:
git stash
Dies nimmt alle verfolgten, modifizierten und im Staging befindlichen Dateien und speichert sie. Ihr Arbeitsverzeichnis wird sauber. Beachten Sie, dass unverfolgte Dateien (Dateien, die Sie nie zu Git hinzugefügt haben) standardmäßig nicht gestasht werden. Um sie einzuschließen, verwenden Sie:
git stash -u
Oder um alles einzuschließen, auch ignorierte Dateien:
git stash -a
Änderungen mit apply zurückholen
Wenn Sie Ihre Nebenaufgabe erledigt haben und Ihre gestashte Arbeit zurück möchten, verwenden Sie:
git stash apply
Dies stellt die gestashten Änderungen in Ihrem Arbeitsverzeichnis wieder her, behält aber den Stash-Eintrag bei. Der Stash bleibt auf dem Regal, was nützlich sein kann, wenn Sie die gleichen Änderungen auf mehrere Branches anwenden möchten.
Änderungen mit pop zurückholen
git stash pop
Pop funktioniert wie apply, entfernt aber auch den Stash-Eintrag nach dem Anwenden. Dies ist die häufigere Wahl, wenn Sie einfach Ihre Arbeit zurück möchten und den Stash nicht aufbewahren müssen.
Der wesentliche Unterschied: apply behält den Stash, pop löscht ihn nach der Wiederherstellung. Verwenden Sie apply, wenn Sie den Stash möglicherweise erneut benötigen. Verwenden Sie pop, wenn Sie damit fertig sind.
Einen Nachricht zu Ihrem Stash hinzufügen
Standardmäßig beschriftet Git Stashes mit einer automatisch generierten Beschreibung wie WIP on main: a3b4c5d commit message. Das ist nicht sehr hilfreich, wenn Sie mehrere Stashes haben. Sie können eine beschreibende Nachricht hinzufügen:
git stash push -m "refactoring the auth module"
Dies erleichtert es erheblich, den Inhalt jedes Stashes zu identifizieren, wenn Sie sie später auflisten.
Mehrere Stashes verwalten
Ihre Stashes auflisten
Git verwaltet einen Stapel von Stashes. Sie können alle mit folgendem Befehl anzeigen:
git stash list
Die Ausgabe sieht etwa so aus:
stash@{0}: On main: refactoring the auth module
stash@{1}: WIP on feature/checkout: 9f2e1d0 add cart logic
stash@{2}: WIP on main: 7c8d9e1 update dependencies
Der neueste Stash ist immer stash@{0}. Jeder neue Stash schiebt die älteren im Stapel nach unten.
Einen bestimmten Stash anwenden oder poppen
Standardmäßig arbeiten apply und pop mit dem neuesten Stash. Um einen bestimmten anzusprechen, referenzieren Sie ihn über seinen Index:
git stash apply stash@{2}
git stash pop stash@{1}
Den Inhalt eines Stash anzeigen
Bevor Sie einen Stash anwenden, möchten Sie vielleicht sehen, was darin enthalten ist:
git stash show stash@{0}
Dies zeigt eine Zusammenfassung der geänderten Dateien. Für den vollständigen Diff fügen Sie -p hinzu:
git stash show -p stash@{0}
Bestimmte Dateien stashen
Manchmal möchten Sie nicht alles stashen. Vielleicht möchten Sie nur die Änderungen in ein oder zwei Dateien beiseitelegen. Seit Git 2.13 können Sie dies so tun:
git stash push -m "sidebar layout changes" src/components/Sidebar.tsx src/styles/sidebar.css
Nur die angegebenen Dateien werden gestasht. Alles andere bleibt in Ihrem Arbeitsverzeichnis.
Stashes löschen und bereinigen
Einen einzelnen Stash löschen
Wenn Sie einen bestimmten Stash nicht mehr benötigen, entfernen Sie ihn mit:
git stash drop stash@{1}
Dies löscht diesen Stash-Eintrag. Die verbleibenden Stashes werden automatisch neu indiziert.
Alle Stashes löschen
Um alle Stashes auf einmal zu entfernen:
git stash clear
Seien Sie vorsichtig damit. Es gibt kein Rückgängigmachen. Alle gestashten Änderungen werden dauerhaft gelöscht.
Eine Branch aus einem Stash erstellen
Manchmal stashen Sie Änderungen und stellen dann fest, dass sie eine eigene Branch verdienen. Anstatt den Stash anzuwenden und dann eine Branch zu erstellen, bietet Git eine Abkürzung:
git stash branch new-feature-branch stash@{0}
Dies erstellt eine neue Branch ausgehend vom Commit, bei dem der Stash ursprünglich erstellt wurde, wendet den Stash an und löscht ihn. Es ist besonders nützlich, wenn das Anwenden des Stash auf Ihre aktuelle Branch Konflikte verursachen würde.
Häufige Fallstricke
- Stashes vergessen. Stashes werden leicht vergessen. Führen Sie regelmäßig
git stash listaus, um zu prüfen, ob Sie übrig gebliebene Stashes haben, die angewendet oder gelöscht werden sollten. - Stash-Konflikte. Wenn sich der Code seit dem Stashen erheblich geändert hat, kann das Anwenden des Stash Merge-Konflikte erzeugen. Lösen Sie diese auf die gleiche Weise wie jeden anderen Merge-Konflikt.
- Stash statt Commits verwenden. Wenn Sie häufig stashen, erwägen Sie stattdessen, Ihre laufende Arbeit zu committen. Sie können diese Commits später jederzeit mit amend oder squash überarbeiten. Stash ist am besten für schnelle, kurzlebige Kontextwechsel geeignet, nicht für die Langzeitspeicherung.
Mit Stashes in GitSquid arbeiten
GitSquid zeigt Stashes direkt im Commit-Graphen an, sodass Sie auf einen Blick sehen können, welche Stashes existieren und von welchem Commit sie erstellt wurden. Ein Rechtsklick auf einen Stash öffnet ein Kontextmenü mit Optionen zum Anwenden, Poppen, Löschen oder Bereinigen aller Stashes. Das macht die Verwaltung von Stashes schneller als das Eingeben von Befehlen, besonders wenn Sie mehrere Stashes haben und diese inspizieren oder aufräumen müssen.
Kurzreferenz
| Befehl | Was er macht |
|---|---|
git stash |
Verfolgte Änderungen stashen |
git stash -u |
Stash einschließlich unverfolgter Dateien |
git stash push -m "msg" |
Stash mit beschreibender Nachricht |
git stash list |
Alle Stashes auflisten |
git stash apply |
Stash wiederherstellen, Eintrag behalten |
git stash pop |
Stash wiederherstellen, Eintrag löschen |
git stash drop stash@{n} |
Einen bestimmten Stash löschen |
git stash clear |
Alle Stashes löschen |
git stash show -p |
Den vollständigen Diff eines Stash anzeigen |
git stash branch <name> |
Eine Branch aus einem Stash erstellen |
Git stash ist eines dieser Werkzeuge, die unwichtig erscheinen, bis man sie braucht. Sobald Sie sich damit vertraut gemacht haben, wird der Kontextwechsel zwischen Aufgaben nahtlos. Halten Sie Ihre Stashes mit Nachrichten organisiert, räumen Sie alte regelmäßig auf, und verwenden Sie pop statt apply, wenn Sie den Stash nicht aufbewahren müssen.