Я уже довольно давно пользуюсь git stash pop
. Недавно я узнал о команде git stash apply
. Когда я попробовал, оказалось, что он работает так же, как git stash pop
.
В чем разница между git stash pop
и git stash apply
?
Я уже довольно давно пользуюсь git stash pop
. Недавно я узнал о команде git stash apply
. Когда я попробовал, оказалось, что он работает так же, как git stash pop
.
В чем разница между git stash pop
и git stash apply
?
git stash pop
выбрасывает (по умолчанию самый верхний) тайник после его применения, тогда как git stash apply
оставляет его в списке тайников для возможного последующего повторного использования (или вы можете затем git stash drop
его).
Это происходит, если после git stash pop
не возникнут конфликты, и в этом случае он не удалит тайник, оставив его вести себя точно так же, как git stash apply
.
Другой способ взглянуть на это: git stash pop
это git stash apply && git stash drop
.
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/
git stash pop
применяет верхний зашитый элемент и удаляет его из стека. git stash apply
делает то же самое, но оставляет его в стеке тайника.
Увидев это в действии, вы сможете лучше понять разницу.
Предположим, мы работаем над веткой 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.
В 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
области.
Предполагая, что ошибок не будет, и вы хотите работать с верхним элементом тайника в списке доступных тайников:
git stash pop
= git stash apply
+ git stash drop
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
classpop()
иpeek()
, где pop изменяет верхнюю границу на уменьшение (top = top-1), ноpeek()
может получить только верхний элемент.
Быстрый ответ:
git stash pop
- ›удалить из тайника
git stash apply
- ›держать его в тайнике