Если я работаю в ветке A и внезапно мне нужно поработать в ветке B, прежде чем я буду готов к фиксации в ветке A, я сохраняю свои изменения в A, проверяю B, выполняю свою работу там, затем проверяю A и применяю тайник.
Если я работаю над A и хочу перестать работать в течение дня, следует ли мне спрятать свою работу, а затем применить ее на следующий день (когда я возобновлю свою работу), или я должен просто оставить все как есть - незафиксированные измененные файлы в рабочий каталог? Я не понимаю, почему мне нужно использовать тайник в этом случае, кроме тех случаев, когда есть какое-то преимущество в безопасности.
Еще один сценарий: работаю и на работе, и дома. Если я не готов с фиксацией, когда хочу вернуться домой, могу ли я спрятать свою работу, отправить ее на GitHub, а затем вытащить этот тайник дома?
Ответы:
Stash - это всего лишь удобный способ. Поскольку ветки настолько дешевы и просты в управлении в git, я лично почти всегда предпочитаю создавать новую временную ветку, чем прятать, но в основном это вопрос вкуса.
Единственное место, где мне нравится прятать, - это если я обнаруживаю, что что-то забыл в своей последней фиксации и уже начал работать над следующей в той же ветке:
источник
git stash pop
дважды, вы потеряете различие между этими двумя наборами изменений.git stash push
. Основная причина этого заключается в том, чтоgit stash push
вводится возможность сохранения выбранных спецификаций путей , которыеgit stash save
не поддерживаются.Разобью ответ на три абзаца.
Часть 1:
git stash
(Чтобы сохранить незафиксированные изменения в «тайнике». Примечание: это удаляет изменения из рабочего дерева!)git checkout some_branch
(в этом случае перейдите на нужную веткуsome_branch
)git stash list
(список тайников)git stash apply
(чтобы применить тайник к рабочему дереву в текущей ветке)git stash apply stash@{12}
(если у вас будет много тайников, вы можете выбрать, какой тайник будет применяться - в этом случае мы применяем тайник12
)git stash drop stash@{0}
(удалить из списка тайников - в данном случае тайник0
)git stash pop stash@{1}
(чтобы применить выбранный тайник и удалить его из списка тайников)Часть 2:
Вы можете скрыть свои изменения с помощью этой команды, но это не обязательно.
Вы можете продолжить на следующий день без тайника.
Эти команды предназначены для скрытия ваших изменений и работы с разными ветвями или для реализации некоторой реализации вашего кода и сохранения в тайниках без ветвей и фиксации вашего индивидуального случая!
А потом вы можете использовать некоторые тайники и проверить, что лучше.
Часть 3:
Команда Stash для локального скрытия ваших изменений.
Если вы хотите работать удаленно, вы должны зафиксировать и нажать.
источник
Основная идея
Итак, команда Basicallly Stash сохраняет некоторые изменения, которые вам не нужны или не нужны в данный момент; но они могут вам понадобиться.
источник
Вы можете использовать следующие команды:
Чтобы сохранить незафиксированные изменения
git stash
Чтобы перечислить ваши сохраненные тайники
git stash list
Чтобы применить / вернуть незавершенные изменения, где x равно 0,1,2 ...
git stash apply stash@{x}
Чтобы применить тайник и удалить его из списка тайников
git stash pop stash@{x}
Чтобы применить тайник и оставить его в списке тайников
git stash apply stash@{x}
источник
Если вы нажмете,
git stash
когда у вас есть изменения в рабочей копии (не в промежуточной области), git создаст спрятанный объект и поместит его в стек тайников (точно так же, как и вы,git checkout -- .
но вы не потеряете изменения). Позже вы можете выскочить из вершины стопки.источник
Команда stash сохранит все изменения, внесенные вами с момента последней фиксации. В вашем случае нет причин тратить деньги, если вы собираетесь продолжить работу на следующий день. Я бы использовал тайник только для отмены изменений, которые вы не хотите фиксировать.
источник
git stash
не будет менять вашу ветку. В частности, он не будет «отменять» зафиксированные изменения. Он только (временно) отменит любые незафиксированные изменения в ваших файлах. - Это может показаться придирчивым, но в контексте git такие слова имеют особое значение. Вы действительно не должны путать их.git stash
не будет касаться каких-либо коммитов и, следовательно, вообще не будет изменять никакую ветку. Он не будет ничего «удалять» из ветки и никак не «сбрасывать» ее. Ветка остается прежней, изменяются только файлы в рабочем дереве. - Это две совершенно разные вещи.Я знаю, что StackOverflow - не место для ответов, основанных на мнениях, но на самом деле у меня есть хорошее мнение о том, когда откладывать изменения в тайник.
Вы не хотите вносить экспериментальные изменения
Когда вы вносите изменения в свое рабочее пространство / рабочее дерево, если вам нужно выполнить какие-либо операции на основе ветвей, такие как слияние, push, выборка или извлечение, вы должны быть в чистой точке фиксации. Поэтому, если у вас есть изменения в рабочем пространстве, вам необходимо их зафиксировать. Но что, если вы не хотите их совершать? Что, если они экспериментальные? Что-то, что вам не нужно в истории коммитов? Что-то, чего вы не хотите, чтобы другие видели, когда вы нажимаете на GitHub?
Вы не хотите потерять локальные изменения с помощью аппаратного сброса
В этом случае вы можете сделать полный сброс. Но если вы выполните полный сброс, вы потеряете все изменения в локальном рабочем дереве, потому что все будет перезаписано на то место, где оно было во время последней фиксации, и вы потеряете все свои изменения.
Итак, что касается ответа «когда вы должны спрятать», то ответ заключается в том, что вам нужно вернуться к чистой точке фиксации с синхронизированным рабочим деревом / индексом / фиксацией, но вы не хотите потерять свои локальные изменения в процесс. Просто отложите свои изменения в тайник, и все будет хорошо.
И как только вы сделали свой тайник, а затем слили, потянули или нажали, вы можете просто припрятать pop или применить и вы вернетесь туда, откуда начали.
Git stash и GitHub
GitHub постоянно добавляет новые функции, но на данный момент есть способ сохранить там тайник. Опять же, идея тайника заключается в том, что он локальный и частный. Никто другой не сможет заглянуть в ваш тайник без физического доступа к вашей рабочей станции. Точно так же, как git reflog является закрытым, а журнал git является общедоступным. Вероятно, это не было бы приватным, если бы оно было перенесено на GitHub.
Один из приемов может заключаться в том, чтобы выполнить различие в вашей рабочей области, проверить разницу в вашем репозитории git, зафиксировать и затем нажать. Затем вы можете сделать тягу из дома, получить дифференциал и затем размотать его. Но это довольно грязный способ добиться таких результатов.
источник