Git diff - 忽略重新排序

13

Git diff numbers

diff --git a/numbers b/numbers
index 5f5fbe7..d184fef 100644
--- a/numbers
+++ b/numbers
@@ -1,3 +1,3 @@
-1
+4
+3
 2
-3

数字3被重复,但顺序已更改。 是否有办法在git中忽略重新排序或任何grep解决方案? 我只想得到添加和删除数字的结果,而不是相同数字的重新排序。 可以帮忙吗?

2个回答

10

差异对比工具通常使用Myers'差分算法。您无法控制GNU/git/diff的行为,但可以传递一些开关来影响其行为,但在您的情况下它们无关紧要。

您可以简单地后处理输出并删除重复行,例如可以通过以下awk脚本将您的差分流程,该脚本将删除(重复的)-/+重新排序。

git diff | awk '{ seen[substr($0,2)]++; l[i++] = $0; } END { for (j = 0; j < i; ++j) if (seen[substr(l[j],2)] < 2) print l[j] }'

对于您的示例,输出将是:
diff --git a/numbers b/numbers
index 5f5fbe7..d184fef 100644
--- a/numbers
+++ b/numbers
@@ -1,3 +1,3 @@
-1
+4
 2

2
如果是单个文件,可以这样做:

最初的回答

diff -u <(sort ./numbers) <(git show HEAD^^:./numbers | sort)

运行此命令将告诉您排序文件是否会引入其他差异(即忽略行顺序)。如果有任何被压制或新的行,您将看到它们,但请注意,diff输出可能不准确(文件已被排序,因此这些行可能以不同的顺序打印)。"最初的回答"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接