Я использую в 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
с результатами, вы все равно получите ошибку конфликта.
Получил эту полезную ссылку, в которой говорится о разнице, как заявил Джон Цвинк, и о недостатке git stash pop
.
Например, скажем, ваши спрятанные изменения вступают в противоречие с другими изменениями, которые вы внесли с тех пор, как сперва создали шкатулку. Как pop, так и apply будут полезны для режима разрешения конфликтов слияния, что позволит вам красиво разрешать такие конфликты… и ни один из них не избавится от тайника, даже если, возможно, вы тоже ожидаете pop. Так как многие люди ожидают, что тайники будут простым стеком, это часто приводит к тому, что они случайно высовывают тот же тайник позже, потому что думают, что его уже нет.
Ссылка: http://codingkilledthecat.wordpress.com/2012/04/27/git-stash-pop-considered-harmful/
Видя это в действии, вы можете лучше понять разницу.
Предполагая, что мы работаем над 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 vs apply
Working
Если вы хотите применить свои самые последние изменения к текущим не поэтапным изменениям, а также удалить это хранение, то вам следует это сделать git stash pop
.
# apply the top stashed changes and delete it from git stash area.
git stash pop
Но если вы хотите применить свои самые последние изменения к текущим не поэтапным изменениям, не удаляя их, тогда вам следует это сделать git stash apply
.
Примечание: Вы можете связать этот случай с
Stack
классомpop()
иpeek()
методами, где pop изменяет верхнюю часть на уменьшение (top = top-1), ноpeek()
может получить только верхний элемент.