2

可能的重复:
git:切换分支并忽略任何更改而不提交。
Git 分支行为异常

我知道一般建议是在 git 中切换分支之前有一个干净的状态。( stash 或 park-commit )。我试图了解我什么时候会得到“您有本地更改无法切换分支”,我无法遵循逻辑:

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

git checkout -b 新

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

git checkout master (这是怎么工作的?我还没有阶段\提交我对新的更改)

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

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

谢谢,冉

4

3 回答 3

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

如果您在修改文件之前将 testbranch 重新设置在 master 上,它会起作用,因为文件不会被修改。

另一种说法是,如果分支是分歧的,并且您修改分歧的文件,它将无法工作。

于 2011-07-10T03:22:18.033 回答
2

当 master 和 test HEAD 相同时,当你切换回来时,test 中的本地更改将应用​​于 master。

但是,如果它们不是,假设您在创建测试后在 master 中有一个额外的提交或在 test 中有一个额外的提交,您将收到警告。


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

当您切换分支并且文件仅在本地修改时,Git 不会给您警告/消息(并将更改合并到另一个分支)。例如,你在 master 上有你的 repo,创建一个分支 temp,对文件进行本地修改。现在,当您切换到 master 时,您将不会收到消息。另一方面,如果您在 temp 中进行更改并提交它们(即 temp 与 master 不同),然后您进行了本地修改,当您切换到 master 时,它将给您该消息

Git 分支行为异常

于 2011-07-10T03:22:46.113 回答
1

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

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

于 2011-07-10T05:11:59.570 回答