当我在分支之间进行合并时,git会进行递归合并,并在冲突处插入<<<<<<< Temporary merge branch x
代码块。
我取消了合并操作,然后执行git merge-base <source-commit> <target-commit>
,但它只返回一个SHA1值。
是否有可能找出多个基础提交的内容?
--all
选项来运行git-merge-base
。根据文档描述:-a, --all
Output all merge bases for the commits, instead of just one.
这将显示所有合并基础,用于创建一个临时树作为递归合并基础。
例如,考虑一些交叉合并的分支“A”和“B”:
3a4f5a6 -- 973b703 -- a34e5a1 (branch A)
/ \ /
7c7bf85 X
\ / \
8f35f30 -- 3fd4180 -- 723181f (branch B)
很明显,分支A和B有两个共同的祖先,它们参与了一次交错合并:3a3f5a6
和 8f35f30
。使用--all
标志,git-merge-base
会选择其中一个共同祖先作为合并基础,但使用该标志将包括两个共同祖先:
% git-merge-base A B
3a3f5a6ec1c968d1d2d5d20dee0d161a4351f279
% git-merge-base --all A B
3a3f5a6ec1c968d1d2d5d20dee0d161a4351f279
8f35f30bfe09513f96cf8aa4df0834ae34e93bae
git-merge-recursive
会将两个合并基础合并成一个虚拟提交,该提交将被用作三方合并算法的实际公共祖先。