我看过所有类似的问题。然而,我又检查了一遍,确实发生了一些奇怪的事情。

在一台服务器上(Solaris with Git 1.8.1),我克隆了Git存储库,然后将. Git文件夹复制到我现有的活动文件中。这很好,我可以跑了

git status

then

git diff [filename]

检查任何不同的文件。

在另一台服务器上(Solaris with Git 1.7.6),我做的完全相同

git diff [filename]

即使文件内容完全不同,也不会显示任何内容。我还测试了添加一个新文件,提交它,然后编辑。同样的问题,git status显示文件已更改,但git diff没有显示任何内容。如果我下载更改后的文件并在本地运行diff,那么我将得到diff输出。


当前回答

我有一个问题,其中数百行结束修改了一些程序和git diff列出所有源文件更改。在修复行尾之后,git状态仍然将文件列为已修改。

我可以通过将所有文件添加到索引,然后重新设置索引来修复这个问题。

git add -A
git reset

核心。文件模式设置为false。

其他回答

我将文件添加到索引中:

git add file_name

然后跑着说:

git diff --cached file_name

你可以在这里看到git diff的描述。

如果你需要撤销你的git添加,那么请参阅这里:我如何在提交前撤销'git add' ?

我怀疑您的Git安装或存储库有问题。

尝试运行:

GIT_TRACE=2 git <command>

看看能不能找到有用的线索。如果这没有帮助,只需使用strace,看看哪里出了问题:

strace git <command>

我有一个类似的问题:git diff会显示差异,但git diff <filename>不会。结果是我将LESS设置为一个包含-F(——quit-if-one-screen)的字符串。移除那面旗帜就解决了问题。

正如在前面的回答中已经提到的,这种情况可能是由于行结束问题(CR/LF vs. LF)而出现的。我用这个命令解决了这个问题(在Git 2.22.0版本下):

git add --renormalize .

根据手册:

       --renormalize
           Apply the "clean" process freshly to all tracked files to
           forcibly add them again to the index. This is useful after
           changing core.autocrlf configuration or the text attribute in
           order to correct files added with wrong CRLF/LF line endings.
           This option implies -u.

对我来说,这与文件权限有关。 在我的项目上使用Mac/Linux的人似乎提交了一些具有非默认权限的文件,我的Windows Git客户端未能重现。

我的解决方案是告诉Git忽略文件权限:

git config core.fileMode false

其他见解:如何让Git忽略文件模式(chmod)的更改?