为什么更改分支会导致未提交的更改?

时间:2014-01-08 16:03:49

标签: git branch git-branch

我有一个非常奇怪的情况......可能是因为我对git相对较新,但这似乎是错误的。每次我从命令行更改分支时,都会得到一组未提交的更改(根据我签出的分支不同而不同)。

我正在使用Stash存储库(“存储”Git存储库,就像私有GitHub,而不是“git stash”命令)。这个repo有多个分支:master / development / feature1等。

要明确的是,我没有对任何分支机构进行任何更改......我是一个全新的用户,连接到全新安装的全新客户端。我只是浏览分支并确保每个分支都建立在我的系统上。

以下是我使用的命令:

git branch -a

这列出了所有分支,最初显示我在本地“主”和其他分支远程。

然后我检查了开发分支

git checkout -b development origin/development
git status

这告诉我,我现在有大约20个未提交的更改,包括一些源文件,项目文件和一些misc数据文件。为什么?这是正常的git行为吗?

我试着回去掌握:

git checkout master

但由于未提交的更改,此操作失败。如果我强迫它:

git checkout master -f

它似乎工作正常,我回到主分支,没有任何未提交的更改。

真的吗?!?未提交的更改甚至不是分支之间的差异......只是一个子集。有什么可以解释这种行为?我怎么能阻止它?

仅供参考,在Windows 7上运行 git version 1.8.3.msysgit.0

1 个答案:

答案 0 :(得分:1)

我几乎100%确定这与Windows与Linux / Mac行结尾的经典问题有关 - 也就是说,当您点击Windows中的“Enter”键时,您会获得不同的字符/在Linux或Mac中点击“Enter”时的字符集。 (如果你很好奇,here's some information关于那个问题)

要确定这是否是您的问题,请运行git diff。如果结果显示被删除的行与添加的行具有相同的内容(或“看起来相同”),则可能是空白问题。

Git知道这个问题,并会为你管理行结尾......如果你告诉它。尝试更改autocrlf选项:

git config --global core.autocrlf true

看看问题是否仍然存在。

您可能仍需要针对这些差异重新规范存储库。如果是,GitHub has a great article on this。有关重新规范化的详细信息,请参阅底部。

(哦,如果我离开这里,请用git diff中的例子更新你的问题,我们可以用它来解决这个问题。)