2013-03-08 17 views

risposta

821

git stash pop getta via la (più in alto, per impostazione predefinita) scorta dopo l'applicazione, mentre git stash apply lascia nella lista scorta per un eventuale successivo riutilizzo (o si può allora git stash drop esso). Questo succede a meno che non ci siano conflitti dopo git stash pop, in questo caso non rimuoverà la memoria, comportandosi esattamente come git stash apply.

Un altro modo per vederlo: git stash pop è git stash apply && git stash drop.

+67

come le note di risposta di @briankip qui sotto, se ci sono conflitti quando uno stash è spuntato, pop non rimuoverà lo stash (e si comporterà esattamente come applicato) – Kashif

+1

@John Zwinck l'ultima riga è più chiara, grazie – Suresh

+0

grazie per quel commento @Kashif –

37

git stash pop applica l'elemento superiore nascosto e lo rimuove dalla pila. git stash apply fa lo stesso, ma lo lascia nella pila di scorta.

58

Questo link utile indica la differenza, come dichiarato da John Zwinck e un inconveniente di Git stash pop.

Ad esempio, affermare che le modifiche memorizzate sono in conflitto con altre modifiche apportate dalla prima creazione della memoria. Sia pop che apply attivano abilmente la modalità di risoluzione dei conflitti di fusione, permettendoti di risolvere bene tali conflitti ... e nessuno dei due si libererà della memoria, anche se forse ti aspetti un pop. Dal momento che molte persone si aspettano che le cianfrusaglie siano semplicemente una pila, questo spesso porta a far scoppiare la stessa scorta accidentalmente dopo perché pensavano che fosse sparita.

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

+4

Questo è stato davvero utile. Mi sono imbattuto in un pop con conflitti e, più tardi, mi sono chiesto perché lo stash fosse ancora nell'elenco nella lista stash – Kashif

+0

Questo è stato davvero utile quando ho accidentalmente inserito la memoria su un ramo sbagliato. – Rahi

+1

Il fatto di uno stash che si interrompe quando un pop fallisce non è un inconveniente, anche se all'inizio potrebbe sembrare così. – Amalgovinus

12

Vederlo in azione potrebbe aiutare a meglio comprendere la differenza.

Supponendo che stiamo lavorando sul ramo master e che abbia un file hello.txt contenente la stringa "Hello".

Cambiamo il file e aggiungiamo una stringa "mondiale". Ora si desidera spostare a un ramo diverso per correggere un bug minore hai appena trovato, quindi è necessario stash le modifiche:

git stash 

è stata spostata verso l'altro ramo, risolto il bug e ora siete pronta a continuare a lavorare sul vostro master ramo, in modo da pop i cambiamenti:

git stash pop 

Ora, se si tenta di rivedere il contenuto scorta si otterrà:

$ git stash show -p 
No stash found. 

Tuttavia, se si utilizza git stash apply invece, si otterrà il contenuto nascosto ma avrete anche tenerlo:

$ 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 

Così pop è proprio come pop di stack - in realtà rimuove l'elemento di una volta che è spuntato, mentre apply è più simile a sbirciare.