Да: добавьте --ancestry-path
к вашей спецификации редакции.(Это работает для любой команды, которая использует commit-graph-walking, включая git log
и git rev-list
.) Но я отмечу, что я не уверен, что вы подразумеваете под прилагательным «прямой» здесь.
Обратите внимание, что A..B
означает B ^A
, т. Е. Используйте набор ancestors(B) - ancestors(A)
(где вычитание здесь - это вычитание набора).Добавление --ancestry-path
означает, что после выполнения вычитания набора (или, точнее, при построении вычитаемого набора), Git также вычитает любой коммит, который не является потомком отмененной ревизии A
.
Внутренне,Git делает это, помечая идентификаторы хеша с фиксированной фиксацией (например, A
в A..B
или B ^A
) с флагом BOTTOM.Такие коммиты собираются в «нижний список», и Git гарантирует, что каждый коммит C , который может находиться в диапазоне A..B
, имеет нижний коммит в качестве одного из своих предков.Это имеет значение, если вы используете git rev-list --ancestry-path X ^Y ^Z
, например: коммиты могут быть потомками Y
или Z
. \
Вот пример фрагмента графика, показывающий, какие коммиты выбраны(●
) или невыбранный (○
), даже если они «в диапазоне» A..B
:
...--A--●---●--B--...
\ \ /
○--●--●
Обратите внимание, что commit A
не выбран, и commit *Здесь выбрано 1034 *.