Я использую в 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 applyWorking
Если вы хотите применить свои самые последние изменения к текущим не поэтапным изменениям, а также удалить это хранение, то вам следует это сделать 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()может получить только верхний элемент.