无法从工作目录中删除文件

时间:2015-03-24 21:25:55

标签: git

我试图检查分支机构,但不断收到此错误:

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只会像其他任何文本差异一样处理尾随空格,而不是让我resetstash让我感到奇怪?这种行为是否可配置?

3 个答案:

答案 0 :(得分:1)

最有可能的是,存储库包含File.txtfile.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行结尾保存在存储库中,似乎已经解决了这个问题。