Разница между git stash pop и git stash apply

я использую git stash pop в течение некоторого времени. Недавно я узнал о

4 ответов


git stash pop выбрасывает (самый верхний, по умолчанию) тайник после его применения, тогда как git stash apply оставляет его в списке заначку для возможного последующего использования (или вы можете тут git stash drop его).

это происходит, если нет конфликтов после git stash pop, в этом случае он не будет удалять заначку, ведя себя точно так же, как git stash apply.

другой способ взглянуть на это:git stash pop is git stash apply && git stash drop.


У этой полезной ссылке, что государства разница, как Джон Zwinck заявил и недостаток в Git Сташ поп.

например, скажите, что ваши скрытые изменения конфликтуют с другими изменениями, которые вы сделали с момента первого создания тайника. И pop, и apply помогут запустить режим разрешения конфликтов слияния, позволяя вам красиво разрешать такие конфликты... и ни один не избавится от тайника, хотя, возможно, вы ожидаете, что pop. Так много людей ожидайте, что тайники будут просто простой стопкой, это часто приводит к тому, что они случайно открывают тот же тайник позже, потому что они думали, что он исчез.

ссылка http://codingkilledthecat.wordpress.com/2012/04/27/git-stash-pop-considered-harmful/


git stash pop применяет верхний скрытый элемент и удаляет его из стека. git stash apply делает то же самое, но оставляет его в стеке тайника.


видя его в действии может помочь вам лучше понять разницу.

предположим, что мы работаем над master филиала и , который содержит строку "Hello".

Давайте изменим файл и добавим к нему строку" world". Теперь вы хотите перейти в другую ветку, чтобы исправить незначительную ошибку, которую вы только что нашли, поэтому вам нужно stash изменения:

git stash

вы перешли в другую ветку, исправили ошибку, и теперь вы готовы продолжить работая на master филиал, так что вы pop изменения:

git stash pop

теперь, если вы попытаетесь просмотреть содержимое тайника, вы получите:

$ git stash show -p
No stash found.

однако, если вы используете git stash apply вместо этого вы получите скрытый контент, но вы также сохраните его:

$ 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

так pop так же, как pop стека-он фактически удаляет элемент, как только он выскочил, в то время как apply больше нравится ку.