我刚刚安装了最新的 Git (1.9.5),突然它告诉我我的工作树不干净(更改未暂存),但我在我的任何文件中都看不到任何更改任何 diff 工具(我试过 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 的差异工具告诉我所有行都已更改,但我无法发现任何差异。与 git bash 的差异相同。
运行 git reset --hard
根本没有帮助——命令执行没有任何问题,但最后我仍然有相同的“更改”文件。
更新:core.autocrlf 为 false,core.fileMode 也为 false。我还注意到,报告要更改的文件正是上次提交时提交的文件。
我在 Windows 上。
最佳答案
欢迎来到 hell 。祝您住宿愉快:-)
您看不到的区别是行尾。简而言之,您已经告诉 Git 将所有行结尾转换为 Windows 或 Unix,并且存储库中有一个文件在存储库中具有不同的行结尾。
当您 check out 文件时,Git 会进行转换,创建一个看起来正确的本地文件。当你做一个 diff
时,Git 不会转换(因为磁盘上的文件必须是正确的,为什么它会转换已经在 repo 中的东西?)现在你得到了不存在的差异.
解决方案:确保为每个可以 push
的开发人员正确配置 Git,以正确的结尾提交文件一次,并为任何创建带有错误行结尾的文件的人戴上一顶愚蠢的帽子.
相关:
关于git 告诉我我的文件被更改了,但我看不出有什么不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28745636/