如何审查合并提交以检测不正确的帅哥

时间:2016-09-01 10:49:29

标签: git merge git-merge

通常在审核合并提交时,我们会git diff-tree --cc <commit>(或只是git show <commit>),但我遇到了以下问题:

假设您将B合并到A中,并且在解决冲突期间,您需要从AB分支中选择一个大块来解决它。让我们说A中的hunk由于某种原因取代B中的大块,但是因为你可能不知道它并仅仅通过例如判断提交日期,您从B分支中选择hunk。

如果您没有进行任何其他修改,则多父差异通过git show将不会显示任何diff输出,因为生成的hunk完全位于其中一个父提交中。

进一步阐述,如果你有这个冲突:

<<<<<<< HEAD
aaa
=======
bbb
>>>>>>> b

并删除aaa hunk并选择bbb,反之亦然,git show <merge_commit>根本不会显示任何内容,从而阻止您查看合并期间选择了哪些大块

这可能导致难以找到回归线。

我怎样才能看到在解决冲突期间选择了什么帅哥?

编辑:我所追求的只是查看冲突的人(因此不会自动合并)。

2 个答案:

答案 0 :(得分:1)

将合并与特定父级(甚至所有父级)区分开来。

通常,要比较的父级是第一个父级,即RecyclerView.Adapter.onBindViewHolder(...)HEAD^1HEAD~1HEAD^(所有意思都相同)。要与第二个父级进行比较,请选择HEAD~(没有其他简短的方法来表达第二个父级:您必须使用帽子后缀和数字)。

如果合并不是当前(HEAD)提交,则用合并提交ID替换HEAD^2

要查看针对所有父级的差异,您可以简单地HEAD,其中(仅在内部)“拆分”合并,以便不是将该提交合并为差异,而是每次针对每个父母区分一个父母。

因此:

git show -m <commit>

(如果你愿意,可以在你看到足够的时候停止,或者直到最后)或者:

git show -m <commit>

答案 1 :(得分:1)

  

编辑:我所追求的只是查看冲突的人(因此不会自动合并)。

不是您要找的答案:使用git命令无法做到这一点。 git不会以任何方式或方式跟踪合并的解析方式(git rerere缓存除外,但这对我们没有帮助)。你需要的东西就像“4-way diff”(A,B,普通父和合并结果),这是我从未听说过的。

理论上,您可以回过头来自己编写一个程序,重新执行原始3向合并以生成中间文件(带有冲突标记)和diff 到合并结果。 git没有规定为你做这件事。

编辑:提及git rerere,虽然这对此没有帮助。