2015-03-24 82 views
3

我试图检出一个分支删除文件,但不断收到此错误:无法从工作目录

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仍在工作 目录中。
  • 当我I add该文件,然后stash,它回到 工作目录。
  • 当我I reset --hard,没有什么变化。 file.txt仍为工作目录中的 。
  • 当我checkout --当前 分支,没有什么变化。 file.txt仍然在工作目录中。
  • 我甚至试过git rm -f file.txt然后stash。也没有帮助。

在做完所有这些之后,我仍然无法签出不同的分支,因为我被卡在file.txt中。

我该如何解释这里发生了什么?我该如何摆脱file.txt?

我正在使用Windows上的git-scm,如果它很重要。

编辑:git diff --check显示尾随空白有差异。为什么不能像任何其他文本差异一样对待尾随空白,而是通过不让我resetstash这么奇怪?这种行为是否可配置?

回答

1

我们结束了反正取出text=auto设置,因为我们在Windows上的所有工作。现在,Windows行结束符保存在存储库中,它似乎解决了这个问题。

1

很可能,存储库包含File.txtfile.txt(如果您正在与使用Linux或Mac的人进行协作,可能会发生这种情况)。 Windows认为这是相同的文件,所以只有其中一个会存在于工作目录中,而git会一直认为另一个文件已被更改。

要检查是否这实际上是问题,运行此命令:

git ls-tree -r HEAD 

,并寻找与不同的外壳在同一目录中的文件(或用不同的外壳目录)。

解决此问题的最简单方法是让另一个平台上的某个人删除或重命名这两个文件。 (如果你的项目在某种程度上依赖于同时拥有这两个文件,解决方案是要么重新考虑这个需求,要么从Windows切换回来......)

+0

谢谢你的想法,但事实并非如此(没有双关语:)) – 2015-03-24 21:38:32

+0

:D - 文件名或路径中是否有非英文字符? – 2015-03-24 22:23:45

+0

不,所有的字符都属于'[a-zA-Z。]' – 2015-03-24 22:39:16

1

你可能有行尾问题阅读以下内容:

https://help.github.com/articles/dealing-with-line-endings/

长话短说,尽量改变.gitattributes文件如下:

* text=auto => #* text=auto 

或者

git config --global core.autocrlf true 

另一种选择是提交fi乐

这一切都取决于是否所有的开发商在同一个平台或不工作..

+0

设置已经如您所述。 – 2015-03-25 11:34:58