当我在分支之间合并时,git会对冲突进行递归合并,并放入<<<<<<< Temporary merge branch x
块。
我中止合并,然后执行git merge-base <source-commit> <target-commit>
,但它只返回一个SHA1。
是否有可能找出多个基本提交的内容?
答案 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有两个参与纵横交错的共同祖先:3a3f5a6
和8f35f30
。 git-merge-base
会选择共享祖先的一个作为合并基础,但使用--all
标记将同时包含:
% git-merge-base A B
3a3f5a6ec1c968d1d2d5d20dee0d161a4351f279
% git-merge-base --all A B
3a3f5a6ec1c968d1d2d5d20dee0d161a4351f279
8f35f30bfe09513f96cf8aa4df0834ae34e93bae
在这种情况下,正如您所注意到的,git-merge-recursive
将合并两个合并库以创建一个虚拟提交,该提交将用作三向合并算法的实际共同祖先。
答案 1 :(得分:0)
有关如何使用一个特定基础重新合并一个特定文件的说明,请参阅this answer至your related question。 [历史记录:OP删除了这个问题,但现在已经复活了;我在这里得到了答案,但它属于那里;因此所有这些链接....]