`git stash --patch` 显示更改的行,`git diff`/`git status` 没有显示

`git stash --patch` showing lines changed that `git diff`/`git status` are not showing

当我尝试执行 git stash save --patch 时,我得到了很多 git diffgit status 中看不到的补丁更改。每次更改都会删除一些行,然后重新插入相同的行,没有明显的变化,例如:

-Some text line
+Some text line
-Another line
+Another line

所有这些更改都在一个资源文件中,该文件已经有一段时间没有被触及了。我的平台是 Windows,对 Windows 使用 Git。

为什么 git stash 向我显示的内容与 git diff 不同,我该如何解决?

这与臭名昭著的 git 行结尾/core.autocrlf 选项和 .gitattributes 文件有关。虽然我不明白原因,但我已经找到了解决方案。

事实证明,某些 git 进程¹ 在我的本地存储库中创建了一个未跟踪的 .gitattributes 文件。该文件中的几乎所有行都被注释掉了,除了靠近顶部的行:

* text=auto

当我注释掉这一行时,就这样

#* text=auto

git stash 的问题消失了,我只看到 git diff 看到的变化。


¹) 我怀疑原因是我在同一个存储库中创建了一个新的 Visual Studio C# 项目——我猜 IDE 检测到存储库并添加了文件。