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

Я уже довольно давно пользуюсь git stash pop. Недавно я узнал о команде git stash apply. Когда я попробовал, оказалось, что он работает так же, как git stash pop.

В чем разница между git stash pop и git stash apply?


person Sandeep Raju Prabhakar    schedule 08.03.2013    source источник


Ответы (8)


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

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

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

person John Zwinck    schedule 08.03.2013
comment
как примечания к ответу @briankip ниже, если возникают конфликты при открытии тайника, pop не удалит тайник (и будет вести себя точно так же, как apply) - person Kashif; 21.11.2014
comment
Кажется, что даже если неустановленные изменения в вашей ветке совпадают с результатом git stash pop, вы все равно получите ошибку конфликта. - person DimP; 01.02.2018

Получил эту полезную ссылку, в которой говорится о различии, как заявил Джон Цвинк, и о недостатке git stash pop.

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

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

person briankip    schedule 23.09.2013
comment
Тот факт, что тайник затягивается при неудачной попытке взлома, на самом деле не является недостатком, даже если поначалу так может показаться. - person Amalgovinus; 16.12.2017

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

person jchapa    schedule 08.03.2013

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

Предположим, мы работаем над веткой master и у нас есть файл hello.txt, содержащий строку «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 похож на всплывающее окно стека - он фактически удаляет элемент после его извлечения, в то время как apply больше похож на peek.

person Maroun    schedule 30.11.2016

В git stash - это хранилище, в которое можно перемещать текущие измененные файлы.

Область stash полезна, когда вы хотите получить некоторые изменения из git репозитория и обнаружили некоторые изменения в некоторых общих файлах, доступных в 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.

Примечание: - git apply применяет изменения только из области тайника, в то время как git pop применяется, а также удаляет изменения из stash области.

person Vikrant Kashyap    schedule 16.05.2019

Предполагая, что ошибок не будет, и вы хотите работать с верхним элементом тайника в списке доступных тайников:

git stash pop = git stash apply + git stash drop

person Greeso    schedule 23.09.2020

Git Stash Pop vs apply Работает

Если вы хотите применить ваши самые скрытые изменения к текущему неэтапному изменению и удалить этот тайник, вам следует пойти на git stash pop.

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

Но если вы хотите применить ваши самые скрытые изменения к текущему неэтапному изменению, не удаляя его, вам следует выбрать git stash apply.

Примечание. Этот случай можно связать с методами Stack class pop() и peek(), где pop изменяет верхнюю границу на уменьшение (top = top-1), но peek() может получить только верхний элемент.

person Vikrant Kashyap    schedule 27.02.2019

Быстрый ответ:

git stash pop - ›удалить из тайника

git stash apply - ›держать его в тайнике

person Ehsan Mashhadi    schedule 23.01.2021