获取 diff(或 git diff)以正确显示插入的大块头

Der*_*all 7 diff git

假设我有两个文件。第一个有内容:

line 1
foo
line 2

line 1
bar
line 2
Run Code Online (Sandbox Code Playgroud)

第二个在中间插入了一个新部分,所以它看起来像这样:

line 1
foo
line 2

line 1
new text
line 2

line 1
bar
line 2
Run Code Online (Sandbox Code Playgroud)

现在,当我执行“diff -u”时,我得到如下输出:

--- file1   2013-06-25 16:27:43.170231844 -0500
+++ file2   2013-06-25 16:27:59.218757056 -0500
@@ -1,7 +1,11 @@
line 1
foo
line 2

line 1
+new text
+line 2
+
+line 1
bar
line 2
Run Code Online (Sandbox Code Playgroud)

这并没有正确反映插入了中间节——相反,它看起来像是第二节被更改了,并且在末尾添加了一个新节(这是因为算法从第一个不同的行开始)。

有没有办法让 diff(单独使用,或者使用 git diff)来显示这个输出?

--- file1   2013-06-25 16:27:43.170231844 -0500
+++ file2   2013-06-25 16:27:59.218757056 -0500
@@ -1,7 +1,11 @@
line 1
foo
line 2
+
+line 1
+new text
+line 2

line 1
bar
line 2
Run Code Online (Sandbox Code Playgroud)

这在生成补丁供某人查看时主要是一个问题,其中一个新函数被插入到一组相似的函数中。默认行为并不反映真正改变的内容。

chi*_*rlu 1

耐心差异算法 ( git diff --patience) 可能会给您更自然的结果,但并非在所有情况下都是如此。