Я використовую 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
.
Наприклад, скажіть, що ваші приховані зміни суперечать іншим змінам, які ви внесли з моменту першого створення сховища. І поп, і застосовні програми допоможуть запустити режим вирішення конфліктів, дозволяючи добре вирішити такі конфлікти ... і жоден з них не позбудеться прихованих ситуацій, навіть якщо, можливо, ви також очікуєте, що поп також. Оскільки багато людей очікують, що прихильність буде просто простим стеком, це часто призводить до того, що вони випадково пізніше вискакують ту саму скриньку, бо думали, що її вже немає.
Посилання: 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
з'являється , в той час як більше схожий на заглянути .
У git
схованці є область зберігання , де поточні змінені файли можуть бути переміщені.
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()
методами, коли поп змінює верх по декрементам (top = top-1), алеpeek()
лише отримує верхній елемент.