Git 重写文件中的所有行?

Git Rewrites all lines in a file?

我想弄清楚为什么 有时 git 在一次提交中擦除整个文件,然后重写所有行,从头再来。

发生这种情况时,我们无法正确定位所有更改。

示例:

原文件:

hello world

然后我添加一个新行:

(git 的正确行为是:)

hello world + This is a new line

但有时我们会在提交中遇到这种情况:

-hello world +hello world +This is a new line

在这个例子中,只有两行,所以很容易弄清楚发生了什么。 但这种情况发生在大文件上。

这种行为的原因可能是什么? 此外,在同一提交中,可能存在正确的文件(其中 git 仅识别更改的行)和不正确的文件。

Git 也在跟踪 whitespaceline ending 更改。所以可能您的 "invisible" 个字符之一发生了变化。

有时 git 如果一开始您的文件没有最后的换行符然后又添加了一个,也会显示此信息;像这样:

-line
\ No newline at end of file
+line

如果您使用 git diffgit show 查看这些差异,请尝试添加 -w 参数以忽略所有空格更改。这样,您可以在查看差异时获得您正在寻找的效果。

例如:

git diff -w

git show -w