Git rev-list:排除已包含在合并中的提交

Git rev-list: exclude commits already included in a merge

我有一个仓库有一个master分支,经常从不同的缺陷分支合并,如下图(defect1是缺陷分支的名称):

我想检索 master 分支的所有提交的列表,从之前的提交 A 到头部(在本例中为 E)。由于我的项目的特定用例,此列表将用于还原所有提交。

我一直在使用 git rev-list:

收集此列表

git rev-list "${commitA}~1"..origin/master

问题是,当我这样做时,我混合了提交 X 和 Y,而提交 D 已经包含了提交 X 和 Y 的更改。我可以使用 git revert -m 1 恢复提交 D。当我尝试还原 X 和 Y 时出现错误,因为提交不在主树中。我只想检索 A~1、A、B、C、D 和 E。我可以轻松地做类似的事情:

git rev-list "${commitA}~1"..origin/master ^defect1

但是可以有多个不同名称的缺陷分支,不可能提前知道它们的名称。

git-rev-list 中是否有其他选项可以启用此行为?

git rev-list master --first-parent