如何在合并提交中列出已解决冲突的统计信息?

Posted

技术标签:

【中文标题】如何在合并提交中列出已解决冲突的统计信息?【英文标题】:How to list stats of resolved conflicts in a merge commit? 【发布时间】:2016-11-21 03:07:32 【问题描述】:

在合并分支时,可能会发生冲突,我们应该解决冲突以完成合并。我们如何仅列出合并中已解决冲突的统计信息?

【问题讨论】:

“我们如何仅列出合并中已解决冲突的统计信息”是什么意思?请解释一下。 假设您从分支 X 开始,从分支 X 创建了一个名为 Y 的新分支,并向其添加了两个名为 C1 和 C2 的提交。现在,如果您将分支 Y 合并回分支 X(没有冲突)并查看合并提交中的更改统计信息,您会看到您在提交 C1 和 C2 中所做更改的统计信息。但是,如果您在合并过程中遇到冲突并且您成功解决了它,最后合并提交的统计信息包含提交 C1、C2 和您为解决冲突所做的更改。在以后的情况下,我想知道是否有办法只查看冲突提交的统计信息。 如果你这样做 git pull origin Y 它只会进行一次提交(冲突提交)。如果你这样做git pull --no-ff origin Y,它将与所有提交合并,包括冲突提交。 好吧,不过我不打算合并分支,之前已经合并了。我想知道它的冲突提交统计。 git diff --name-only --diff-filter=U 【参考方案1】:

TL;DR 回答:试试吧。

分支在 git 中的成本为零,因此只需创建几个 test_merge_sourcetest_merge_destination 分支并开始合并。 5-10 分钟后,您要么完成,要么还剩下一点/一些/很多,因为发生了一些/一些/很多冲突,您可以选择完成/放弃合并尝试。


很抱歉给你一个否定的答案,但你的问题的前提存在根本性的缺陷,你所要求的也是不可能的。

因为任何计算机算法都不可能确定某事是否是冲突。是的,有一些工具可以自动合并不同的文件,但即使是完美且无故障的合并也可能会构成冲突。

该问题与询问版本之间更改的行数相同,这同样是一个不可能回答的问题。

 /* example1.c */
 #include <stdio.h>
-#include <varargs.h>
+#include <stdarg.h>
 ...
 /* In this diff one line is changed */


 /* example2.c */
 #include <stdio.h>
-#include <varargs.h>
+#include <math.h>
 ...
/* In this diff one line is removed and one line added */

如上所示,一行是否更改完全取决于上下文。因此,没有(健全的)版本控制工具会尝试告诉您更改了多少行,它们只会说添加/删除的行。


现在,您可能会说您对失败的自动合并感兴趣,实际上并没有冲突。很公平,但这完全取决于所使用的工具。例如,如果相邻的两行被修改而 KDiff3 不会被修改,Git 的内部合并处理将失败(这通常是您想要的,但与相距较远的行相比,这样做不正确的风险更高,所以有一个权衡)。

这意味着自动合并的内容不是静态的,会随着时间而改变。那么,您是在寻找未与最初合并代码时使用的 git 版本自动合并的内容,还是与今天的 git 进行新合并的结果是什么?1

有一个 git 命令rerere 将记录已解决的失败合并尝试,可能会用于提取此类信息。但它必须显式启用,它显着改变了合并处理,它只是每个存储库的设置,它只会在有限的时间内保留历史记录,并且可能会被清除,因此它远非解决方案。


1 正如开头所指出的,这个问题的答案实际上只是尝试。

【讨论】:

以上是关于如何在合并提交中列出已解决冲突的统计信息?的主要内容,如果未能解决你的问题,请参考以下文章

如何找出导致冲突的 Git 提交?

解决合并冲突后如何使用默认的 git commit 消息?

稍后恢复合并冲突解决

还原合并提交后解决合并冲突

如何在 git 中显示作者贡献的统计信息?

如何修改git已经提交的信息及合并多次提交