我如何才能看到合并提交与同一父项的自动合并之间的差异?

How can I see a diff between merge commit and what would be an automatic merge of the same parents?

我历史上有过几次糟糕的合并(由于人为错误)。我想要一个快速的方法来找出我是否有更多类似的东西。为了自动化它,我想看看,对于每个合并提交,合并将自动执行(使用给定的冲突解决策略)与给定合并中实际发生的事情之间的区别。

我该怎么做?

您必须进行自动合并。

为此,检查可疑合并的两个 parents 之一,在此过程中给自己一个 "detached HEAD"。如果 $suspect_merge 包含适合可疑合并的名称(例如,哈希 ID):

git checkout $suspect_merge^1

然后,运行 git merge 在另一个 parents:

git merge [options] $suspect_merge^2

合并将完成并在分离的 HEAD 上进行新的提交,或者由于冲突而失败。如果失败,您可以手动正确完成,然后提交。

现在你有一个好的合并,你可以将其与可疑合并进行比较:

git diff $suspect_merge HEAD

当您 git checkout 任何命名分支时,您刚刚在分离的 HEAD 上进行的合并将被放弃。它最终(通常是 30 天后的某个时间,当它的 reflog 条目到期时)被垃圾收集。要保留它,请给它起个名字:分支或标签名称效果很好。