2013-12-12 36 views
23

如果我在分支A上工作并且突然需要在分支B上进行提交之前需要在分支B上工作,则我在A上存储我的更改,结帐B,在那里完成我的工作,然后结帐A并应用存储。什么时候应该使用git存储?

如果我在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

存储命令将存储自上次提交以来所做的任何更改。在你的情况下,如果你第二天要继续工作,没有理由隐藏。我只会使用存储来取消您不想提交的更改。

+0

不,'git stash'不会改变你的分支。它尤其不会“恢复”任何承诺的更改。它只会(临时)放弃对您的文件的任何未提交的更改。 - 它可能看起来很挑剔,但这些词在git环境中有非常特殊的含义。你真的不应该混淆这些。 – michas

+0

谢谢你指出。我相应地改变了我的答案。 – Severin

+0

在git中,“分支”被定义为一系列的提交。 'git stash'不会触及任何提交,因此根本不会修改任何分支。它不会从分支中“移除”任何东西,也不会以任何方式“重置”它。分支保持不变,只有工作树中的文件发生变化。 - 这是完全不同的两件事。 – michas

0

如果碰到git stash当你有工作副本中的变化(不在暂存区),git将创建一个隐藏对象并将其推入堆栈(就像您做过的那样,但您不会失去更改)。稍后,您可以从堆栈顶部弹出。

相关问题