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

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

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

line 1
foo
line 2

line 1
bar
line 2

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

line 1
foo
line 2

line 1
new text
line 2

line 1
bar
line 2

现在,当我执行“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

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

有没有办法让 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

这主要是在生成补丁供某人审阅时出现的问题,其中一个新函数被插入到一组相似的函数中。默认行为并不反映真正发生的变化。

答案1

Git 2.9 于今年早些时候发布,其中包括命令--compaction-heuristic上的实验标志git diff

在 2.9 中,Git 的 diff 引擎学习了一种新的启发式:它尝试将块边界保持在空行,只要块的底部与前面上下文的底部匹配,就将块“向上”移动,直到我们遇到空行。

我认为 GitHub 没有在 Web UI 上启用差异以进行 Pull 请求和比较,但您可以在本地进行。--word-diff如果您需要这种粒度级别,我建议结合使用它。

更多详细信息,请访问 GitHub 博客:https://github.com/blog/2188-git-2-9-has-been-released

答案2

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

答案3

在某些情况下,命令git diff --word-diff(或--color-words)可能会给您更好的结果

相关内容