Если причиной исключения D
является то, что он не является потомком B
, 1 , рассмотрите возможность использования --ancestry-path
:
git log --ancestry-path B..X # or git rev-list with the same arguments
Это, однако, исключает B
в ревизионной прогулке. Включение B
само по себе немного сложно: у вас есть опция --boundary
, но это иногда включает слишком много коммитов. Другой метод заключается в использовании B^@
для исключения всех родителей B
без исключения самого B
. Это работает независимо от того, является ли B
регулярным коммитом или слиянием, и в противном случае действие --ancestry-path
остается без изменений. Это даже работает, если B
является root коммитом, хотя в этом случае я не уверен, что --ancestry-path
будет каким-либо использованием.
(Если B - обычный однопользовательский коммит, git log --ancestry-path B^..X
делает трюк и проще думать о чем B^@
.)
1 Это причина моего комментария к исходному вопросу о том, почему вы собираетесь исключить D
.