`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 diff
或 git 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 检测到存储库并添加了文件。
当我尝试执行 git stash save --patch
时,我得到了很多 git diff
或 git 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 检测到存储库并添加了文件。