Zum Inhalt springen

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.

stash

Ä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

bash
git status
bash
On branch master
Changes to be committed:
new file: style.css
Changes not staged for commit:
modified: index.html

Git stash

bash
$ git stash
bash
Saved working directory and index state WIP on master: 5002d47 our new homepage
HEAD is now at 5002d47 our new homepage

Git stash

bash
$ git status
bash
On branch master
nothing to commit, working tree clean

Zwischenlagerte Ä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

bash
git status
bash
On branch master
nothing to commit, working tree clean

Git stash

bash
git stash pop
bash
On 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

bash
git stash -u

Du kannst Änderungen an ignorierten Dateien ebenfalls hinzufügen, indem du beim Ausführen von git stash die Option -a (oder --all) verwendest.

Git stash

bash
git stash -a

Mehrere 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

bash
git stash list
bash
stash@{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 homepage

Es 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

bash
git stash pop stash@{3}
bash
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

bash
git stash show
bash
index.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

bash
git stash show -p
bash
diff --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

bash
git stash -p
bash
diff --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,?]? n

Hunk-Befehle

BefehlBeschreibung
/Nach einem Hunk per Regex suchen.
?Hilfe ausgeben.
nDen Hunk nicht zwischenlagern.
aDiesen Hunk und alle späteren Hunks in der Datei zwischenlagern.
dDiesen Hunk oder einen der späteren Hunks in der Datei nicht zwischenlagern.
eDen aktuellen Hunk manuell bearbeiten
qBeenden (ausgewählte Hunks werden zwischen gelagert)
sDen Hunk in kleinere Hunks aufteilen.
yDen 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

bash
git stash branch add-stylesheet stash@{1}
bash
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

bash
git stash drop stash@{1}
bash
Dropped stash@{1} (17e2697fd8251df6163117cb3d58c1f62a5e7cdb)

Wenn du git stash clear verwendest, werden alle Stashes gelöscht:

Git stash

bash
git stash clear

Practice

Was sind die Funktionen und Eigenschaften des Befehls 'git stash'?

Finden Sie das nützlich?

Dual-run-Vorschau — vergleichen Sie mit den Symfony-Routen live.