git-merge-base returns 只有一次提交

git-merge-base returns only one commit

当我在分支之间合并时,git 会进行递归合并并产生冲突,放入 <<<<<<< Temporary merge branch x 个块。

我中止合并,然后执行 git merge-base <source-commit> <target-commit>,但它 returns 只有一个 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 有两个参与交叉合并的共同祖先:3a3f5a68f35f30git-merge-base 将选择 一个 共同祖先作为合并基础,但使用 --all 标志将同时包括:

% git-merge-base A B
3a3f5a6ec1c968d1d2d5d20dee0d161a4351f279
% git-merge-base --all A B
3a3f5a6ec1c968d1d2d5d20dee0d161a4351f279
8f35f30bfe09513f96cf8aa4df0834ae34e93bae

在这种情况下,正如您所注意到的,git-merge-recursive 将合并两个合并基础以创建一个虚拟提交,该提交将用作三向合并算法的实际共同祖先。

有关如何使用一个特定的基础重新合并一个特定文件的说明,请参阅 this answer to your related question。 [历史记录:OP 删除了问题,但现在又复活了;我在这里得到了答案,但它属于那里;因此所有这些链接....]