Si applica la differenza tra git stash pop e git stash


1024

Sto usando git stash popda un po 'di tempo. Di recente ho scoperto il git stash applycomando. Quando l'ho provato, sembrava funzionare come git stash pop.

Qual è la differenza tra git stash pope git stash apply?

Risposte:


1628

git stash pop butta via lo stash (più in alto, per impostazione predefinita) dopo averlo applicato, mentre lo git stash apply lascia nell'elenco degli stash per un possibile riutilizzo successivo (o puoi quindi git stash dropfarlo).

Ciò accade a meno che non ci siano conflitti dopo git stash pop, nel qual caso non rimuoverà lo stash, lasciandolo comportarsi esattamente come git stash apply.

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


117
come indicato di seguito dalla risposta di @ briankip, se ci sono conflitti quando viene spuntata una scorta, pop non rimuoverà la scorta (e si comporterà esattamente come si applica)
Kashif

Sembra che anche se le modifiche non messe in scena nel tuo ramo sono le stesse git stash popdel risultato, otterrai comunque un errore di conflitto.
DimP

79

Ho questo link utile che afferma la differenza, come ha affermato John Zwinck e uno svantaggio di git stash pop.

Ad esempio, supponi che le tue modifiche nascoste siano in conflitto con altre modifiche che hai apportato da quando hai creato la scorta. Sia pop che apply attiveranno in modo utile la modalità di risoluzione dei conflitti di unione, consentendoti di risolvere piacevolmente tali conflitti ... e nessuno dei due si sbarazzerà della scorta, anche se forse ti aspetti anche il pop. Dal momento che molte persone si aspettano che gli stash siano solo uno stack, questo spesso li porta a far scattare accidentalmente lo stesso stash in seguito perché pensavano che fosse sparito.

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


6
Il fatto di persistere in una situazione in cui un pop fallito in realtà non è uno svantaggio, anche se all'inizio può sembrare così.
Amalgovinus,

65

git stash popapplica l'elemento nascosto superiore e lo rimuove dallo stack. git stash applyfa lo stesso, ma lo lascia nello stack.


43

Vederlo in azione potrebbe aiutarti a capire meglio la differenza.

Supponendo che stiamo lavorando su un masterramo e che abbiamo un file hello.txtche contiene una stringa "Hello".

Modifichiamo il file e aggiungiamo la stringa "world". Ora vuoi passare a un altro ramo per correggere un bug minore che hai appena trovato, quindi devi stashapportare le modifiche:

git stash

Ti sei spostato sull'altro ramo, hai corretto il bug e ora sei pronto per continuare a lavorare sul tuo masterramo, quindi hai pople modifiche:

git stash pop

Ora se provi a rivedere il contenuto di stash otterrai:

$ git stash show -p
No stash found.

Tuttavia, se usi git stash applyinvece, otterrai il contenuto nascosto ma lo manterrai anche:

$ 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

Quindi popè proprio come il pop dello stack: in realtà rimuove l'elemento una volta spuntato, mentre applyè più simile a sbirciatina .


5

In git stash è un'area di archiviazione in cui è possibile spostare i file modificati attualmente.

stasharea è utile quando si desidera estrarre alcune modifiche dal gitrepository e rilevate alcune modifiche in alcuni file reciproci disponibili nel gitrepository.

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.

Nota: - git applyapplicare solo le modifiche dall'area di scorta mentre si git popapplica, nonché rimuovere le modifiche stashdall'area.


1

Git Stash Pop vs applyWorking

Se si desidera applicare le modifiche stash principali alle modifiche non gestite correnti ed eliminare anche quelle stash, è necessario procedere git stash pop.

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

Ma se si desidera applicare le modifiche in primo piano alle modifiche non in scena correnti senza eliminarle, è necessario procedere git stash apply.

Nota: è possibile correlare questo caso con Stackclasse pop()e peek()metodi, in cui pop modifica la parte superiore in base ai decrementi (top = top-1) ma è in peek()grado di ottenere solo l'elemento top.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.