Я использовал 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 drop
).
Это происходит, если только после git stash pop
конфликты, в этом случае он не удалит тайник, оставляя его вести себя точно так же, как git stash apply
.
Еще один способ взглянуть на это: git stash pop
- это git stash apply && git stash drop
.
Получил эту полезную ссылку, в которой говорится о различии, как заявил Джон Звинк и недостаток Git stash pop.
Например, скажите, что ваши спрятанные изменения вступают в противоречие с другими изменениями, которые вы делали с момента создания таза. Оба типа pop и apply будут эффективно запускать режим разрешения конфликтов слиянием, позволяя вам хорошо разрешать такие конфликты... и ни один из них не избавится от кошелька, даже несмотря на то, что, возможно, вы ожидаете поп-музыки. Поскольку многие люди ожидают, что stashes просто будет простым стеком, это часто приводит к тому, что они случайно выталкивают один и тот же штамп позже, потому что они думали, что он ушел.
Ссылка http://codingkilledthecat.wordpress.com/2012/04/27/git-stash-pop-considered-harmful/
git stash pop
применяет верхний скрытый элемент и удаляет его из стека. git stash apply
делает то же самое, но оставляет его в стеке stash.
Увидев это в действии, вы можете лучше понять разницу.
Предполагая, что мы работаем над ветвью master
и имеем файл hello.txt
, который содержит строку "Hello".
Позвольте модифицировать файл и добавить к нему строку "world". Теперь вы хотите перейти на другую ветку, чтобы исправить незначительную ошибку, которую вы только что нашли, поэтому вам нужно stash
изменить:
git stash
Вы перешли в другую ветку, исправили ошибку, и теперь вы готовы продолжить работу с веткой master
, поэтому вы pop
измените:
git stash pop
Теперь, если вы попытаетесь просмотреть содержимое stash, которое вы получите:
$ 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
больше похож на peek.
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
.
Примечание: Вы можете связать этот случай с методами
pop()
иpeek()
классаStack
, где pop изменяет верхнюю часть на уменьшение (top = top-1), ноpeek()
может получить только верхний элемент.
В git
stash есть область хранения, куда могут быть перемещены текущие измененные файлы.
Область stash
полезна, когда вы хотите извлечь некоторые изменения из репозитория git
и обнаружить некоторые изменения в некоторых общих файлах, доступных в git
repo.
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
.