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 有两个参与交叉合并的共同祖先:3a3f5a6
和 8f35f30
。 git-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 删除了问题,但现在又复活了;我在这里得到了答案,但它属于那里;因此所有这些链接....]
当我在分支之间合并时,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 有两个参与交叉合并的共同祖先:3a3f5a6
和 8f35f30
。 git-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 删除了问题,但现在又复活了;我在这里得到了答案,但它属于那里;因此所有这些链接....]