2013-12-12 4 views
23

Если я работаю на ветке A, и вам вдруг нужно работать на ветке B, прежде чем быть готовым с фиксацией на ветке A, я запишу свои изменения на A, checkout B, сделаю там свою работу, затем проверил A и применил stash.Когда я должен использовать git stash?

Если я работаю над A, и я хочу прекратить работу в течение дня, должен ли я накладывать свою работу, а затем применять ее на следующий день, когда я возобновляю свою работу, или я должен просто оставлять вещи такими, какие они есть, - незафиксированные изменения файлов в рабочем каталоге. Я не понимаю, почему в этом случае мне нужно использовать тайник, за исключением случаев, когда есть какое-то преимущество в плане безопасности.

Кроме того, другой сценарий - я работаю как на работе, так и дома. Если я не готов с фиксацией, когда я хочу вернуться домой, могу ли я засунуть свою работу, нажать ее в GitHub, а затем вытащить ее из дома?

ответ

31

Штамп - это просто удобный способ. Поскольку филиалы настолько дешевы и удобны в управлении в git, я лично почти всегда предпочитаю создавать новую временную ветвь, а не ставить, но в основном это вопрос вкуса.

Единственное место, я как припрятать, если я обнаруживаю, я забыл что-то в моей последней фиксации и уже начали работать над следующей в той же отрасли:

# Assume the latest commit was already done 
# start working on the next patch, and discovered I was missing something 

# stash away the current mess I made 
git stash save 

# some changes in the working dir 

# and now add them to the last commit: 
git add -u 
git commit --ammend 

# back to work! 
git stash pop 
1

Команда stash сбрасывает любые изменения, внесенные вами с момента последнего совершения. В вашем случае нет никаких оснований для того, чтобы застревать, если вы продолжите работать над ним на следующий день. Я бы использовал только тайник, чтобы отменить изменения, которые вы не хотите совершать.

+0

Нет, 'git stash' не изменит вашу ветку. Это будет особенно не «возвращать» любые совершенные изменения. Он будет (только временно) отбрасывать любые незафиксированные изменения в ваших файлах. - Это может показаться разборчивым, но эти слова имеют особое значение в контексте git. Вы действительно не должны смешивать их. – michas

+0

Спасибо, что указали это. Я изменил свой ответ соответственно. – Severin

+0

В git «ветвь» определяется как серия коммитов. 'git stash' не будет касаться каких-либо коммитов и поэтому не будет изменять какую-либо ветвь вообще. Он не «удалит» что-либо из ветки и не будет «перезагружать» его каким-либо образом. Филиал остается прежним, изменяются только файлы рабочего дерева. - Это две совершенно разные вещи. – michas

0

Если вы попали git stash, когда у вас есть изменения в рабочей копии (не в промежуточной области), git создаст спрятанный объект и надавит на стек задержек (точно так же, как вы сделали git checkout -- ., но вы не потеряете изменения). Позже вы можете выскочить из верхней части стека.

Смежные вопросы