我的编辑器改变了源文件的行尾。当我执行git diff
时,我看到同一行两次--一次带有-
,一次带有+
--但没有可见的区别。
我该如何让git diff
显示这个实际的更改是什么?
我的编辑器改变了源文件的行尾。当我执行git diff
时,我看到同一行两次--一次带有-
,一次带有+
--但没有可见的区别。
我该如何让git diff
显示这个实际的更改是什么?
首先,确保你正在使用带有颜色输出的Git(例如git diff --color
),并启用了空格高亮显示(例如)
git config color.diff.whitespace "red reverse"
然而,在某些情况下这可能不起作用,因为git
似乎不会突出显示被删除行的末尾空格。要查看已删除的空格,只需使用
git diff -R
将空格放在比较的“添加”侧,这样它就会被突出显示。
更多详细信息,请参阅此SO问题的答案。
000000f0 2d 2d 7d 0a 2b 2b 7d 0a |--}.++}.|
其中的 7d 是 '}' 大括号。 - cardiff space man你可以使用以下命令查看行尾差异。
git diff | cat -v
对于CRLF(DOS)结尾,输出"^M",对于LF(Unix)结尾,则不输出。
显然,git diff做得很对,对于CRLF结尾,打印CR和LF字符。但由于控制台消耗了CR,我们看不到它。通过使用cat -v,我们可以使其可见。
git diff > somediff && vi somediff
,vim 也会把 CRLF 显示为 ^M。不过,使用 cat -v
看起来更整洁。 - Nick X通过逐个字符的“单词差异”来查看空格变化的一种方法是使用
git diff --color --word-diff-regex=.
这将突出显示所有行中 的空格更改。删除的空格用[-
和-]
包裹,添加的空格用{+
和+}
包裹。
或者,如Alex所建议的那样(参见此处)
git diff --color --ws-error-highlight=new,old
突出显示所有在行末尾的空格更改。
git diff --ws-error-highlight=new,old
强调改变行中的空格差异。
2.8.2.windows.1
,它在+
行上显示^M
但不在-
行上显示,这让我一直以为我的IDE(PhpStorm)正在将我的行尾符更改为DOS风格,但实际上并不是这样。它只是保留了由糟糕的编辑器创建的旧文件的现有行尾符。您的修复程序显示了-
和+
的行尾符,这正是git应该做的。 - Buttle Butkus一个图形化的差异比较工具会更好地展示您的更改 - 尝试使用 git difftool
。
使用 meld,并设置首选项以显示空格。(编辑 -> 首选项 -> 显示空格。)
其他图形化工具可能有类似的选项 - @Cotton的回答+评论告诉您如何在vimdiff中执行此操作。
git difftool --tool=meld
连启动 Meld 都不行。我不知道这是因为正在进行变基还是其他原因。 - cardiff space man
git config diff.wsErrorHighlight all
。 - Joshua Goldberg