Diferença entre git stash pop e git stash aplicar

1024

Estou usando git stash pophá algum tempo. Eu descobri recentemente sobre o git stash applycomando. Quando eu tentei, parecia funcionar da mesma forma git stash pop.

Qual é a diferença entre git stash pope git stash apply?

Sandeep Raju Prabhakar
fonte

Respostas:

1628

git stash pop joga fora o stash (mais alto, por padrão) depois de aplicá-lo, enquanto o git stash apply deixa na lista de stash para possível reutilização posterior (ou você pode git stash dropfazê - lo).

Isso acontece, a menos que haja conflitos depois git stash pop; nesse caso, ele não removerá o esconderijo, deixando-o se comportar exatamente como git stash apply.

Outra maneira de olhar para isso: git stash popé git stash apply && git stash drop.

John Zwinck
fonte
117
como de @ briankip notas resposta abaixo, se houver conflitos quando um estoque está estourado, pop não vai remover o esconderijo (e se comportam exatamente como aplicar)
Kashif
Parece que, mesmo que as alterações não organizadas em sua ramificação sejam as mesmas git stash popdo resultado, você ainda receberá um erro de conflito.
DIMP
79

Consegui este link útil que indica a diferença, como John Zwinck afirmou e uma desvantagem de git stash pop.

Por exemplo, digamos que suas alterações ocultas entrem em conflito com outras alterações que você fez desde que você o criou pela primeira vez. Tanto o pop quanto o Apply ativam o modo de resolução de conflitos de mesclagem, permitindo que você resolva bem esses conflitos ... e nenhum deles se livra do estoque, mesmo que você também esteja esperando pop. Como muitas pessoas esperam que os stashes sejam apenas uma pilha simples, isso geralmente os leva a colocar o mesmo stash acidentalmente mais tarde, porque pensavam que ele havia acabado.

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

briankip
fonte
6
O fato de um estoque persistir quando um pop falhou realmente não é uma desvantagem, mesmo que possa parecer assim no começo.
Amalgovinus
65

git stash popaplica o elemento stashed superior e remove-o da pilha. git stash applyfaz o mesmo, mas o deixa na pilha de stash.

jchapa
fonte
43

Vê-lo em ação pode ajudá-lo a entender melhor a diferença.

Supondo que estamos trabalhando na masterramificação e tenha um arquivo hello.txtque contenha a string "Hello".

Vamos modificar o arquivo e adicionar a string "world" a ele. Agora você deseja mudar para uma ramificação diferente para corrigir um bug menor que acabou de encontrar, portanto, é necessário fazer stashas alterações:

git stash

Você mudou para a outra ramificação, corrigiu o erro e agora está pronto para continuar trabalhando em sua masterramificação, para que você faça popas alterações:

git stash pop

Agora, se você tentar revisar o conteúdo oculto, receberá:

$ git stash show -p
No stash found.

No entanto, se você usar git stash apply, obterá o conteúdo oculto, mas também o manterá:

$ 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

Assim popé como o pop da pilha - na verdade, ele remove o elemento depois que ele é disparado, enquanto applyé mais como uma espiada .

Maroun
fonte
5

In git stash é uma área de armazenamento onde os arquivos alterados atuais podem ser movidos.

stashA área é útil quando você deseja obter algumas alterações do gitrepositório e detectou algumas alterações em alguns arquivos mútuos disponíveis no repositório git.

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 applyaplique apenas as alterações da área de esconderijo enquanto git popaplica e remova as alterações da stashárea.

Vikrant Kashyap
fonte
1

Git Stash Pop vs applyWorking

Se você deseja aplicar as principais alterações armazenadas em cache à alteração não faseada atual e excluí-lo também, você deve procurar git stash pop.

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

Mas se você deseja aplicar as principais alterações armazenadas em cache às alterações não-estaduais atuais sem excluí-la, deve optar por isso git stash apply.

Nota: Você pode relacionar esse caso com Stackclasse pop()e peek()métodos, onde pop altera o topo por decrementos (top = top-1), mas peek()é capaz de obter apenas o elemento top.

Vikrant Kashyap
fonte