git diff-显示行尾更改吗?


85

我的编辑器正在更改源文件的行尾。当我这样做时git diff,我看到同一行两次-一次-和一次+-没有明显的区别。

我如何git diff向我展示此更改实际上是什么?


附近重复这个(也下面提到):我最喜欢的是git config diff.wsErrorHighlight all
约书亚·戈德堡

Answers:


64

首先,请确保您使用的是彩色输出(例如git diff --color),并且已使用(例如)启用空白突出显示

git config color.diff.whitespace "red reverse"

但是,这可能并非在所有情况下都有效,因为git似乎并未突出显示已删除行的尾随空白。要查看已删除的空格,只需使用

git diff -R

将空格放在比较的“添加”侧,并在此突出显示。

有关更多详细信息,请参见此SO问题的答案。


我有git版本2.1.4,并且我对git config命令建议采取了行动。但是git diff仍然没有任何区别。如果我将git diff传递到hexdump -C,则根本没有显示: 000000f0 2d 2d 7d 0a 2b 2b 7d 0a |--}.++}.|7d是'}'花括号。
卡迪夫太空人

37

您可以使用以下命令查看行尾差异。

git diff | cat -v

然后,为CRLF(DOS)结尾打印“ ^ M”,对于LF(Unix)结尾打印任何内容。

显然git diff做对了,打印CR和LF字符以结束CRLF。但是因为CR被控制台占用,所以我们看不到它。通过使用cat -v,我们可以使其可见。


另一个类似的方法是git diff > somediff && vi somediff,vim也将CRLF显示为^ M。但是cat -v整洁。
尼克X

1
+1至少让我在使用20年后学会了一个cat我从未意识到的选择。:-)
哈拉尔德

24

观察空格变化的一种方法是用一个字符一个字符地

git diff --color --word-diff-regex=.

这凸显了所有空白改变处处线。去除空格被包裹在[--]和在添加空格{++}

或者,如Alex建议

git diff --color --ws-error-highlight=new,old

突出显示所有空白更改 线的终端


11
git diff --ws-error-highlight=new,old

在更改的行中突出显示空白差异。


您正在使用什么版本的git?我系统上的git 2.1.4说--ws-error-highlight = new,old是无效的选项。
卡迪夫太空人

这个选项是在2015年git 2.5.0中添加的。
MiniGod

5

图形化的差异工具将更好地显示更改-尝试git difftool

使用meld,并设置首选项以显示空白。(编辑->首选项->显示空白。)

其他图形工具可能也有类似的选项-@Cotton的answer + comment告诉您如何使用vimdiff进行此操作。


图形差异工具可能不可用。@ paul-whittaker的回答将在问题(某些终端)隐含的上下文中起作用。
BEON

现在这很奇怪,但是git difftool --tool=meld doesn't甚至可以启动融合。我不知道这是否是因为正在进行重新设置基准。
卡迪夫太空人
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.