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?

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.


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/


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.


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 .


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.


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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.