在git中切换分支 - 我什么时候会得到“你有本地更改不能切换分支。”?

时间:2011-07-10 03:10:33

标签: git branch git-branch git-checkout

  

可能重复:
  git: Switch branch and ignore any changes without committing.
  Git branches behaving strangely

我知道一般的建议是在git中切换分支之前要保持干净状态。 (藏匿或公园承诺)。我想知道我何时会得到“你有本地更改不能切换分支”,我不能遵循逻辑:

我有一个名为version.txt的文件,包含文本“1”:

  

git checkout -b new

     

echo 2>> version.txt(工作目录不脏,修改文件)

     

git checkout master(这是怎么回事?我没有阶段\提交新的更改)

如果我删除新分支中的文件内容或首先暂存文件,也会发生同样的情况。

有人可以帮我理解我什么时候会收到“你有本地更改无法切换分支”。 ?

谢谢, 然

3 个答案:

答案 0 :(得分:5)

这很简单,如果您对文件进行了更改,如果您更改为特定分支,则会对其进行修改。

示例:

$ git init
Initialized empty Git repository in /tmp/asadfasd/.git/
$ echo 1 > bar
$ git commit -am "commit 1 master"
[master (root-commit) 55da003] commit 1
 1 files changed, 1 insertions(+), 0 deletions(-)
 create mode 100644 bar
$ git co -b testbranch
Switched to a new branch 'testbranch'
$ git co master
Switched to branch 'master'
$ echo 2 >> bar
$ git commit -am "commit 2 master"
[master c6dc6d9] commit 2 master
 1 files changed, 1 insertions(+), 0 deletions(-)
$ git co testbranch
Switched to branch 'testbranch'
$ echo 3 >> bar
$ git co master
error: Your local changes to the following files would be overwritten by checkout:
bar
Please, commit your changes or stash them before you can switch branches.
Aborting

如果你在修改文件之前在master上修改testbranch它会起作用,因为文件不会被修改。

另一种方式,如果分支分歧,你修改分歧的文件,它将无法工作。

答案 1 :(得分:2)

当主和测试HEAD相同时,当您切换回来时,测试中的本地更改将应用​​于主控。

如果它们不是,假设您在测试中创建测试或额外提交后在master中有额外提交,则会收到警告。


(只记得我之前已经回答过这个问题 - 在这里粘贴我的旧答案并投票将此问题视为重复)

  

当您切换分支和   文件只在本地修改,Git   不会给你警告/   消息(并将合并更改   进入另一个分支)。例如,   你有你的回购大师,创建一个   分支临时,有本地修改   在文件上。现在,当你切换到   掌握你不会得到消息。如果   另一方面,你做了改变   临时并提交它们(即临时   与主人分道扬)然后你   有局部修改,它会给   当你切换到那条消息时   主

Git branches behaving strangely

答案 2 :(得分:1)

当切换分支时,Git只更新索引和工作目录中与您要转移的修订版不同的部分。如果两个修订版本之间的文件没有差异,git checkout甚至不会查看它是否被修改。

在您的示例中,version.txt的内容在每个分支中都是相同的。因此,当在两者之间切换时,Git愉快地忽略了对该文件的任何未提交的修改。