获取与合并相关的所有提交的有效方法?

Efficient way to get all commits relevant to a merge?

假设我在下面的分支 ABC 之间进行了复杂的章鱼合并:

---1---o---A
    \ /
     X
    / \
---2---o---o---B
            \
             o---C

这与 http://git-scm.com/docs/git-merge-base#_discussion

中描述的相似

我可以使用 git merge-base --all --octopus A B C

从 git 轻松获得 12

我真正需要的是图中所示的所有提交。

我可以通过以下方式手动完成此操作:

git log --pretty=format:%H A...1
git log --pretty=format:%H A...2
git log --pretty=format:%H B...1
git log --pretty=format:%H B...2
git log --pretty=format:%H C...1
git log --pretty=format:%H C...2

然后采用提交的集合并集,但这非常低效。

是否有更有效的方法来生成此列表?

--ancestry-path 正是为了做到这一点而构建的:

git log --pretty=%H --ancestry-path A B C --not $(git merge-base --all --octopus A B C)
git merge-base --all --octopus A B C

(我希望日志有一个 --inclusive 选项,让它包含所有明确标记的底部提交,在那之前必须使用单独的命令列出它们。)