Es gilt der Unterschied zwischen Git Stash Pop und Git Stash

1024

Ich benutze git stash popseit einiger Zeit. Ich habe kürzlich von dem git stash applyBefehl erfahren. Als ich es ausprobierte, schien es genauso zu funktionieren wie git stash pop.

Was ist der Unterschied zwischen git stash popund git stash apply?

Sandeep Raju Prabhakar
quelle

Antworten:

1627

git stash pop wirft den (standardmäßig obersten) Stash nach dem Anwenden weg , während git stash apply er in der Stash-Liste für eine mögliche spätere Wiederverwendung verbleibt (oder Sie können ihn dann verwenden git stash drop).

Dies geschieht nur, wenn danach Konflikte auftreten git stash pop. In diesem Fall wird der Stash nicht entfernt, sodass er sich genau so verhält git stash apply.

Eine andere Sichtweise: git stash popist git stash apply && git stash drop.

John Zwinck
quelle
117
Wie die Antwortnotizen von @ briankip unten zeigen: Wenn es Konflikte gibt, wenn ein Stash auftaucht, wird Pop den Stash nicht entfernen (und sich genau so verhalten wie anwenden)
Kashif
Es scheint, dass Sie auch dann git stash popeinen Konfliktfehler erhalten , wenn die nicht bereitgestellten Änderungen in Ihrem Zweig mit dem Ergebnis übereinstimmen .
DimP
79

Ich habe diesen hilfreichen Link erhalten, der den Unterschied angibt, wie John Zwinck festgestellt hat, und einen Nachteil von git stash pop.

Angenommen, Ihre versteckten Änderungen stehen im Widerspruch zu anderen Änderungen, die Sie seit der ersten Erstellung des Stash vorgenommen haben. Sowohl Pop als auch Apply lösen den Konfliktlösungsmodus für Zusammenführungen hilfreich aus, sodass Sie solche Konflikte gut lösen können… und keiner von beiden wird den Stash los, obwohl Sie vielleicht auch Pop erwarten. Da viele Leute erwarten, dass Stashes nur ein einfacher Stapel sind, führt dies oft dazu, dass sie den gleichen Stash später versehentlich platzen lassen, weil sie dachten, er sei weg.

Link: http://codingkilledthecat.wordpress.com/2012/04/27/git-stash-pop-considered-harmful/

Briankip
quelle
6
Die Tatsache, dass ein Vorrat verweilt, wenn ein Pop versagt, ist wirklich kein Nachteil, auch wenn es auf den ersten Blick so scheint.
Amalgovinus
65

git stash popWendet das oberste versteckte Element an und entfernt es vom Stapel. git stash applymacht das gleiche, lässt es aber im Stapel.

jchapa
quelle
43

Wenn Sie es in Aktion sehen, können Sie den Unterschied möglicherweise besser verstehen.

Angenommen, wir arbeiten an einem masterZweig und haben eine Datei hello.txt, die die Zeichenfolge "Hallo" enthält.

Lassen Sie uns die Datei ändern und der Zeichenfolge "world" hinzufügen. Jetzt möchten Sie in einen anderen Zweig wechseln, um einen kleinen Fehler zu beheben, den Sie gerade gefunden haben. Sie müssen also stashIhre Änderungen vornehmen:

git stash

Sie sind in den anderen Zweig gewechselt, haben den Fehler behoben und können nun weiter an Ihrem masterZweig arbeiten, sodass Sie popdie folgenden Änderungen vornehmen können:

git stash pop

Wenn Sie nun versuchen, den Stash-Inhalt zu überprüfen, erhalten Sie:

$ git stash show -p
No stash found.

Wenn Sie git stash applystattdessen verwenden, erhalten Sie den versteckten Inhalt, behalten ihn aber auch bei:

$ git stash show -p
diff --git a/hello.txt b/hello.txt
index e965047..802992c 100644
--- a/hello.txt
+++ b/hello.txt
@@ -1 +1 @@
-Hello
+Hello world

Es popist also genau wie bei Stack's Pop - es entfernt das Element tatsächlich, sobald es geplatzt ist, während applyes eher wie Peek ist .

Maroun
quelle
5

In git Stash befindet sich ein Speicherbereich, in den aktuell geänderte Dateien verschoben werden können.

stashDer Bereich ist nützlich, wenn Sie einige Änderungen aus dem gitRepository abrufen möchten und einige Änderungen in einigen im gitRepo verfügbaren gegenseitigen Dateien festgestellt haben .

git stash apply //apply the changes without removing stored files from stash area.

git stash pop  // apply the changes as well as remove stored files from stash area.

Hinweis: - git applyWenden Sie die Änderungen nur aus dem Stash-Bereich an, während Sie sie git popanwenden, und entfernen Sie die Änderungen aus dem stashBereich.

Vikrant Kashyap
quelle
1

Git Stash Pop vs applyfunktioniert

Wenn Sie Ihre obersten versteckten Änderungen auf aktuelle nicht bereitgestellte Änderungen anwenden und diese auch löschen möchten, sollten Sie sich dafür entscheiden git stash pop.

# apply the top stashed changes and delete it from git stash area.
git stash pop  

Wenn Sie jedoch Ihre obersten Änderungen auf aktuelle nicht bereitgestellte Änderungen anwenden möchten, ohne sie zu löschen, sollten Sie sich dafür entscheiden git stash apply.

Hinweis: Sie können diesen Fall mit StackKlassen pop()und peek()Methoden verknüpfen , bei denen Pop die Spitze durch Dekremente ändert (top = top-1), aber peek()nur das oberste Element abrufen kann.

Vikrant Kashyap
quelle