如何在使用 parents 之一干净地执行解决的合并提交中检查手动冲突解决

How to inspect manual conflict resolution in merge commits where the resolution is performed cleanly using one of the parents

考虑以下 git 日志以及以下提交

6752364 *   Merge branch 'java-branch'
        |\  
b9e9e66 | * Add an unrelated file
14a7cb9 | * Change favorite language to Java
7b07a43 * | Change favorite language to C#
        |/  
8788146 * C++ is my favorite programming language

You can clone the repo,这个问题我做了个例子

我的目标是检查在合并提交 6752364 中进行了哪些合并冲突解决。例如,我进行了此合并,因此我知道系统提示我在我所做的 readme.md 文件上进行冲突解决使用融合。我选择了“Java”版本而不是“C#”版本。我看不到这个决定记录在合并提交中的任何地方(至少不是以一种可以轻松检查的方式,稍后会详细介绍)。我只能检查文件的最终状态。

在 Whosebug 中有 multiple 关于这个问题,简单地说我应该使用 git show 来检查执行了什么样的解决方案。然而,我的 git show 为我提供了这个输出:

commit 6752364571d0e9c89ddbb3bd287af2e26eb23e59 (HEAD -> master, origin/master)
Merge: 7b07a43 b9e9e66
Author: Henrique Jung <henriquenj@gmail.com>
Date:   Sun Oct 4 21:18:54 2020 +0200

    Merge branch 'java-branch'

我推测 git show 只有在我没有使用 parent 提交解决冲突时才有用,而是使用其中任何一个都不可用的第三个版本(比如写“Haskell”在 Meld 上)。我如何检查合并提交,其中使用“干净地”版本之一完成冲突解决,即直接选择 parent A 或 parent B?我对“Java”而非“C#”的偏好记录在哪里?

我的 git 版本是 2.25.1.


也许您在想:好吧,我可以只看 the commit on GitHub 或 gitg,这会显示差异。但是有一个问题:它显示了 whole 差异。它显示了一个不相关的文件,该文件从一开始就不是冲突解决方案的一部分。所以我可以用这种方式检查分辨率,但是对于大合并会增加很多噪音,我会再次检查两个分支。

这个问题是在我审查一个包含大量冲突解决方案的大型合并时出现的,而涉及 git show 的所有答案都证明没有显示我想要的内容。我可以可靠地检查哪些文件已手动解决冲突的唯一方法是在本地重新合并。显然必须有更好的方法。

merge=6752364571d0e9c89ddbb3bd287af2e26eb23e59
git checkout $merge^1
git merge $merge^2
git diff $merge
如果您不使用 auto-reuse 记录的冲突解决方案,

将执行此操作;如果是,请在合并中添加 -c rerere.enabled=false 作为 git 选项。