通常在审核合并提交时,我们会git diff-tree --cc <commit>
(或只是git show <commit>
),但我遇到了以下问题:
假设您将B
合并到A
中,并且在解决冲突期间,您需要从A
或B
分支中选择一个大块来解决它。让我们说A
中的hunk由于某种原因取代B
中的大块,但是因为你可能不知道它并仅仅通过例如判断提交日期,您从B
分支中选择hunk。
如果您没有进行任何其他修改,则多父差异通过git show
将不会显示任何diff输出,因为生成的hunk完全位于其中一个父提交中。
进一步阐述,如果你有这个冲突:
<<<<<<< HEAD
aaa
=======
bbb
>>>>>>> b
并删除aaa
hunk并选择bbb
,反之亦然,git show <merge_commit>
根本不会显示任何内容,从而阻止您查看合并期间选择了哪些大块
这可能导致难以找到回归线。
我怎样才能看到在解决冲突期间选择了什么帅哥?
编辑:我所追求的只是查看冲突的人(因此不会自动合并)。
答案 0 :(得分:1)
将合并与特定父级(甚至所有父级)区分开来。
通常,要比较的父级是第一个父级,即RecyclerView.Adapter.onBindViewHolder(...)
或HEAD^1
或HEAD~1
或HEAD^
(所有意思都相同)。要与第二个父级进行比较,请选择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
,虽然这对此没有帮助。