我刚刚安装了最新的Git(1.9.5),突然它告诉我我的工作树不干净(更改没有暂存),但我看不到任何文件中的任何更改任何差异工具(我试过Tortoise和Visual Studio的内置)。当我运行git status时,它会说:
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: inc/i_lab_orders.asp
modified: lab_order_list.asp
modified: slib/lab_order_lib.asp
然而,Git GUI的diff工具告诉我所有的行都被改变了,但我无法发现任何差异。与git bash的差异相同。
运行git reset --hard
根本没有帮助 - 命令执行没有任何问题,但最后我仍然有相同的“已更改”文件。
更新:core.autocrlf为false,core.fileMode也为false。我还注意到,报告要更改的文件正是上次提交时提交的文件。
我在Windows上。
答案 0 :(得分:5)
欢迎来到地狱。享受您的住宿: - )
您无法看到的差异是行结束。简而言之,您告诉Git将所有行结尾转换为Windows或Unix,并且repo中有一个文件在回购中有不同的行结尾。
当你签出文件时,Git会进行转换,创建一个看起来正确的本地文件。当你执行diff
时,Git不会转换(因为磁盘上的文件必须正确,为什么它会转换已经存在于repo中的文件?)现在你得到的差异并非如此那里。
解决方案:确保为每个能够push
的开发人员正确配置Git,使用正确的结尾提交文件一次并为任何人创建一个愚蠢的帽子,他们会创建错误行结尾的文件。
相关:
答案 1 :(得分:1)
更改也可能是文件模式,但你可以告诉git忽略这样的事情。
git config core.fileMode false
我建议您使用gitk
在ubuntu上只是
sudo apt-get install gitk
答案 2 :(得分:0)
通过手动删除.git \ rebase-merge-failed文件夹来修复它。谢谢大家试图帮助我。
更新我还怀疑原因是我的.gitattributes文件中有text=auto
。