通常在审查 merge 提交时,我们会做 git diff-tree --cc <commit>
(或简称为 git show <commit>
),但我面临以下问题:
假设你 merge B
进入A
在解决冲突期间,您需要从 A
中选择一个帅哥或 B
分支来解决它。比方说 A
中的帅哥取代了 B
中的帅哥出于某种原因,但由于您可能不知道它并仅通过例如判断提交日期,你从 B
中选择 hunk分支机构。
如果除此之外你没有做其他修改,多父差异通过git show
不会显示任何差异输出,因为生成的 block 完整地包含在其中一个父提交中。
进一步详细说明,如果您有此冲突:
<<<<<<< HEAD
aaa
=======
bbb
>>>>>>> b
并删除 aaa
hunk 并选择 bbb
,反之亦然,git show <merge_commit>
根本不会显示任何内容,因此您无法看到在 merge 过程中选择了什么大块头。
这可能会导致难以发现的回归。
我如何才能看到在解决冲突期间选择了哪些帅哥?
编辑:我所追求的是只查看发生冲突的帅哥(因此不会自动 merge )。
最佳答案
Edit: what I'm after is to view just the hunks that were conflicted (thus not auto-merged).
不是您要找的答案:git
命令无法做到这一点。 git
不会跟踪 merge 是如何以任何方式或方式解决的(git rerere
缓存除外,尽管它在这里对我们没有帮助)。您可能需要类似于“4 向差异”(A、B、公共(public)父级和 merge 结果)之类的东西,这是我从未听说过的。
理论上,您可以返回并自己编写一个程序,重新执行原始的 3 向 merge 以生成中间文件(带有冲突标记)并将 that 与 merge 结果进行比较. git
没有为你做这些的规定。
编辑:提到了 git rerere
,尽管它在这里没有帮助。
关于git - 如何审查 merge 提交以检测不正确的大块头,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39269532/