如何在合并提交中检查手动冲突解决方案,其中使用父级之一干净地执行解决方案

问题描述

考虑以下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文件中的冲突解决方法(使用Meld完成) 。我选择了“ Java”版本而不是“ C#”版本。我看不到此决定记录在合并提交中的任何位置(不能以一种至少可以轻松检查的方式,稍后对此进行更多地检查)。我只能检查文件的最终状态。

StackOverflow中有multiple answers关于此问题,只是说我应该使用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仅在我没有使用任何父提交来解决冲突的情况下才有用,而是使用了其中任何一个都不可用的第三个版本(例如在Meld上写“ Haskell”)。如何使用“干净”版本之一(即直接选择父级A或父级B)完成冲突解决的合并提交?相对于“ C#”,我偏爱“ Java”的地方在哪里记录?

我的git版本是2.25.1。


也许您在想:好吧,我可以看看the commit on GitHub或gitg,它向我展示了差异。但是有一个陷阱:它显示整个差异。它显示一个不相关的文件,该文件最初不是冲突解决的一部分。因此,我可以通过这种方式检查分辨率,但是对于较大的合并会增加很多噪音,因此我将再次检查两个分支。

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

解决方法

merge=6752364571d0e9c89ddbb3bd287af2e26eb23e59
git checkout $merge^1
git merge $merge^2
git diff $merge
如果您不使用已记录冲突解决方案的自动重用,

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