通常在你:
git checkout foo
git checkout bar
Git会告诉您,由于您未提交修改,因此无法更改分支。 (我没有在我面前的确切信息,但这是有效的)。然后,您通常会使用git stash
来摆脱这些修改,并且您正在快乐地进行。
我的同事(他是Git的新手,因此不是故意做任何先进的事情)没有这种行为。在她的机器上,当她git checkout bar
时,它只会将她在foo
上所做的修改移动到bar
。这对我来说非常困惑,因为我已经使用Git至少一年了,从未见过它的行为。
我的同事可能做了什么才能让Git简单地在分支之间移动未添加/未提交的修改文件,而不是抱怨并要求git stash
?
答案 0 :(得分:4)
(我刚刚在这里为同事们写了以下文字,他们是Git的新手。希望有所帮助。)
如果您对分支A上的文件进行了更改并希望切换到分支B(这是不相关的),那么最好先将更改提交到分支A.这样,当您稍后再回到它时,更改仍将在分支A上。 (另一种选择称为“存储”,在某些情况下很有用 - 有关详细信息,请参阅http://schacon.github.com/git/git-stash.html。)
如果您不先提交更改,则可能会出现两种情况。考虑一个文件“file.txt”,分支A和B.两种情况是:
如果您有多个已更改的文件,则情境(2)中的任何文件都将阻止分支切换。
最后,如果要放弃对文件的修改,请使用“git checkout - file.txt”之类的命令。这将丢弃对file.txt的任何未提交的修改,并将其从当前分支恢复为最新提交的版本。
答案 1 :(得分:2)
“正常”实际上是你同事看到的。当您的工作目录中有一些修改并切换到另一个分支时,更改也将在该分支上可用。
当您收到无法切换的消息时,您所在的分支机构和您要切换的分支机构已经发生分歧(相对于在工作目录中修改的文件)只要您是分支机构在工作目录中修改的文件之间切换具有相同的版本,您将能够切换分支。
测试:
git init .
touch a
git add a
git commit -m "adding a"
git branch temp
vi a #add something
git checktout temp # allows you to change
git commit -am "content in a"
vi a #add more content
git checkout master #won't allow you to change!