我试图检查分支机构,但不断收到此错误:
error: Your local changes to the following files would be overwritten by checkout:
file.txt
Please, commit your changes or stash them before you can switch branches.
Aborting
然而:
stash
时,没有任何变化。 file.txt仍在工作中
目录。 add
文件然后stash
时,它会返回到。{
工作目录。 reset --hard
时,没有任何变化。 file.txt是
仍在工作目录中。 checkout --
当前
分支,没什么变化。 file.txt仍在工作目录中。git rm -f file.txt
然后stash
。也没帮助。完成所有这些操作后,我仍然无法查看其他分支,因为我已经遇到了file.txt。
我如何解释这里发生了什么?我如何摆脱file.txt?
如果重要的话,我在Windows上使用git-scm。
编辑: git diff --check
表示尾随空格存在差异。为什么git只会像其他任何文本差异一样处理尾随空格,而不是让我reset
或stash
让我感到奇怪?这种行为是否可配置?
答案 0 :(得分:1)
最有可能的是,存储库包含File.txt
和file.txt
(如果您与使用Linux或Mac的人合作,则可能会发生这种情况)。 Windows认为这是同一个文件,因此工作目录中只存在其中一个文件,而git总是认为另一个文件已被更改。
要检查这是否确实存在问题,请运行以下命令:
git ls-tree -r HEAD
并在同一目录(或具有不同大小写的目录)中查找具有不同大小写的文件。
解决此问题的最简单方法是让其他平台上的某人删除或重命名这两个文件。
(如果您的项目以某种方式依赖于同时拥有这两个文件,那么解决方案是重新考虑该要求或切换到Windows ...)
答案 1 :(得分:1)
您可能遇到关于行结尾的问题,请阅读以下内容:
https://help.github.com/articles/dealing-with-line-endings/
简而言之,请尝试更改.gitattributes
文件,如下所示:
* text=auto => #* text=auto
或者
git config --global core.autocrlf true
另一个选择是提交文件
这完全取决于所有开发人员是否在同一平台上工作..
答案 2 :(得分:1)
我们最终删除了text=auto
设置,因为无论如何我们都在Windows上工作。现在,Windows行结尾保存在存储库中,似乎已经解决了这个问题。