git-merge-base只返回一个提交

时间:2016-05-05 10:58:06

标签: git git-merge

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

我中止合并,然后执行git merge-base <source-commit> <target-commit>,但它只返回一个SHA1。

是否有可能找出多个基本提交的内容?

2 个答案:

答案 0 :(得分:4)

您需要--all选项git-merge-base。来自文档:

-a, --all
    Output all merge bases for the commits, instead of just one.

这将显示将用于创建临时树作为递归合并库的所有合并基础。

例如,考虑一些分支&#39; A&#39;和&#39; B&#39;这是纵横交错的合并:

       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将合并两个合并库以创建一个虚拟提交,该提交将用作三向合并算法的实际共同祖先。

答案 1 :(得分:0)

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