git stash
Definition
Der Befehl git stash legt Änderungen, die du an deiner Arbeitskopie vorgenommen hast, zwischen, damit du andere Arbeiten erledigen und später zu ihnen zurückkehren und sie erneut anwenden kannst.

Änderungen zwischenlagern
Der Befehl git stash nimmt sowohl nicht festgeschriebene, vorgemerkte als auch nicht vorgemerkte Änderungen, speichert sie für die spätere Verwendung und entfernt sie dann aus deiner Arbeitskopie. Zuerst kannst du git status ausführen, damit du den unbereinigten Zustand sehen kannst. Dann führe git stash aus, um die Änderungen zwischenzulagern:
Git stash
git statusOn branch master
Changes to be committed:
new file: style.css
Changes not staged for commit:
modified: index.htmlGit stash
$ git stashSaved working directory and index state WIP on master: 5002d47 our new homepage
HEAD is now at 5002d47 our new homepageGit stash
$ git statusOn branch master
nothing to commit, working tree cleanZwischenlagerte Änderungen erneut anwenden
Der Befehl git stash pop entfernt die Änderungen aus deinem Stash und wendet sie erneut auf deine Arbeitskopie an.
Die alternative Vorgehensweise ist git stash apply, wenn du die Änderungen erneut anwenden und sie in deinem Stash behalten möchtest:
Git stash
git statusOn branch master
nothing to commit, working tree cleanGit stash
git stash popOn branch master
Changes to be committed:
new file: style.css
Changes not staged for commit:
modified: index.html
Dropped refs/stash@{0} (32b3aa1d185dfe6d57b3c3cc3b32cbf3e380cc6a)Nicht verfolgte oder ignorierte Dateien zwischenlagern
Git stash speichert die Änderungen, die zu deinem Index hinzugefügt wurden (vorgemerkte Änderungen), sowie Änderungen an Dateien, die derzeit von Git verfolgt werden (nicht vorgemerkte Änderungen). Es speichert jedoch nicht die neuen Dateien in der Arbeitskopie, die noch nicht vorgemerkt wurden, und ignorierte Dateien. In diesen Fällen hilft die Option git stash -u (oder --include-untracked), um die nicht verfolgten Dateien zwischenzulagern.
Git stash
git stash -uDu kannst Änderungen an ignorierten Dateien ebenfalls hinzufügen, indem du beim Ausführen von git stash die Option -a (oder --all) verwendest.
Git stash
git stash -aMehrere Stashes
Du kannst git stash mehrmals ausführen, um mehrere Stashes zu erstellen, und dann git stash list ausführen, um sie anzuzeigen. Standardmäßig werden Stashes als „WIP“ identifiziert – work in progress. Es steht oben auf dem Branch und den Commits, von denen aus du den Stash erstellt hast.
Git stash
git stash liststash@{0}: WIP on master: 5002d47 our new homepage
stash@{1}: WIP on master: 5002d47 our new homepage
stash@{2}: WIP on master: 5002d47 our new homepageEs ist gut, etwas Kontext mit git stash push -m "message" hinzuzufügen.
Standardmäßig wendet git stash pop den zuletzt erstellten Stash erneut an: stash@{0}
Du kannst auswählen, welcher Stash erneut angewendet werden soll, so:
Git stash
git stash pop stash@{3}Switched to a new branch 'add-stylesheet'
On branch add-stylesheet
Changes to be committed:
new file: style.css
Changes not staged for commit:
modified: index.html
Dropped refs/stash@{1} (32b3aa1d185dfe6d57b3c3cc3b32cbf3e380cc6a)Stash-Diffs anzeigen
Verwende git stash show, um eine Zusammenfassung eines Stashes anzuzeigen:
Git stash
git stash showindex.html | 1 +
style.css | 3 +++
2 files changed, 4 insertions(+)Du kannst auch die Optionen -p oder --patch verwenden, um den vollständigen Diff eines Stashes zu sehen:
Git stash
git stash show -pdiff --git a/style.css b/style.css
new file mode 100644
index 0000000..d92368b
--- /dev/null
+++ b/style.css
@@ -0,0 +1,3 @@
+* {
+ text-decoration: blink;
+}
diff --git a/index.html b/index.html
index 9daeafb..ebdcbd2 100644
--- a/index.html
+++ b/index.html
@@ -1 +1,2 @@
+<link rel="stylesheet" href="style.css"/>Teilweise Stashes
Git erlaubt es dir zu wählen, ob du nur eine einzelne Datei, mehrere Dateien oder einzelne Änderungen innerhalb von Dateien zwischenlagern möchtest. git stash -p geht jeden Hunk (einen Änderungsabschnitt in Git) in der Arbeitskopie durch und fragt, ob du ihn zwischenlagern möchtest oder nicht:
Git stash
git stash -pdiff --git a/style.css b/style.css
new file mode 100644
index 0000000..d92368b
--- /dev/null
+++ b/style.css
@@ -0,0 +1,3 @@
+* {
+ text-decoration: blink;
+}
Stash this hunk [y,n,q,a,d,/,e,?]? y
diff --git a/index.html b/index.html
index 9daeafb..ebdcbd2 100644
--- a/index.html
+++ b/index.html
@@ -1 +1,2 @@
+<link rel="stylesheet" href="style.css"/>
Stash this hunk [y,n,q,a,d,/,e,?]? nHunk-Befehle
| Befehl | Beschreibung |
|---|---|
| / | Nach einem Hunk per Regex suchen. |
| ? | Hilfe ausgeben. |
| n | Den Hunk nicht zwischenlagern. |
| a | Diesen Hunk und alle späteren Hunks in der Datei zwischenlagern. |
| d | Diesen Hunk oder einen der späteren Hunks in der Datei nicht zwischenlagern. |
| e | Den aktuellen Hunk manuell bearbeiten |
| q | Beenden (ausgewählte Hunks werden zwischen gelagert) |
| s | Den Hunk in kleinere Hunks aufteilen. |
| y | Den Hunk zwischenlagern. |
Einen Branch aus einem Stash erstellen
Du kannst mit git stash branch einen neuen Branch erstellen, auf den du deine zwischen gelagerten Änderungen anwenden kannst:
Git stash
git stash branch add-stylesheet stash@{1}Switched to a new branch 'add-stylesheet'
On branch add-stylesheet
Changes to be committed:
new file: style.css
Changes not staged for commit:
modified: index.html
Dropped refs/stash@{1} (32b3aa1d185dfe6d57b3c3cc3b32cbf3e380cc6a)Den Stash aufräumen
Du kannst den Stash mit git stash drop löschen:
Git stash
git stash drop stash@{1}Dropped stash@{1} (17e2697fd8251df6163117cb3d58c1f62a5e7cdb)Wenn du git stash clear verwendest, werden alle Stashes gelöscht:
Git stash
git stash clearPractice
Was sind die Funktionen und Eigenschaften des Befehls 'git stash'?