我在一个文件上运行git-diff,但是更改位于一个长行的末尾。

如果我使用光标键向右移动,它就失去了颜色编码——更糟糕的是,线条没有对齐——这使得跟踪变化变得更加困难。

有没有办法防止这个问题,或者简单地让行换行?

我通过mingw32运行Git 1.5.5。


当前回答

完全归功于Josh Diehl对这个答案的评论,尽管如此,我还是觉得这应该是一个自己的答案,所以加上它:

处理在长行中看到差异的一种方法是使用面向单词的diff。这可以通过以下方式实现:

git diff --word-diff

在这种情况下,您将得到一个显著不同的diff输出,它将明确地显示一行中发生了哪些更改。

例如,不是得到这样的东西:

diff --git a/test-file.txt b/test-file.txt
index 19e6adf..eb6bb81 100644
--- a/test-file.txt
+++ b/test-file.txt
@@ -1 +1 @@
-this is a short line
+this is a slightly longer line

你可能会得到这样的东西:

diff --git a/test-file.txt b/test-file.txt
index 19e6adf..eb6bb81 100644
--- a/test-file.txt
+++ b/test-file.txt
@@ -1 +1 @@
this is a [-short-]{+slightly longer+} line

或者,用彩色代替这个:

你可能会得到这个:

现在,如果您正在比较一个非常长的行,您可能仍然对您最初描述的寻呼机情况有问题,并且在其他答案中已经解决了这个问题,显然令人满意。不过,希望这为您提供了一种新的工具,可以更容易地识别在线上发生了哪些更改。

其他回答

不是一个完美的解决方案,但gitk和git-gui都可以显示这个信息, 还有滚动条。

或者,如果您使用less作为默认的分页器,只需键入-S,同时查看差异,以重新启用less的包装。

从Git 1.5.3开始 (2007年9月)

无寻呼机选项已经可用。

git --no-pager diff

我如何防止git差异从使用寻呼机?

例子

从v2.1开始,wrap是默认的

Git v2.1发布说明

你可以简单地将git diff的输出输出到more:

git diff | more

列出当前/默认配置:

  $ git config --global core.pager  
    less -FXRS -x2

然后更新并去掉-S,比如:

  $ git config --global core.pager 'less -FXR -x2'

-S:使比屏幕宽度长的行被剪切而不是折叠。