Ответ 1
git rev-list
могут показывать детей, но эти дети должны быть доступны из предоставленных вами коммитов. Предполагая, что вы хотите показать всех детей, доступных из всех веток вашего репо, вы можете использовать что-то вроде
git rev-list --all --not $COMMIT^@ --children | grep "^$COMMIT"
Это должно выводить строку, которая выглядит как
$COMMIT $child1 $child2 $child3 ...
Для удобства вы можете добавить эту команду в псевдоним git:
children = "!f() { git rev-list --all --not $1^@ --children | grep $(git rev-parse $1); }; f" # reachable children of a ref
Синтаксис $COMMIT^@
может быть путаным, поэтому я объясню это. Надеюсь, $COMMIT
не требует пояснений. Затем следует ^@
, который расширяется для всех родителей ссылочной фиксации. Поэтому $COMMIT^@
означает "все родители $COMMIT
". Поскольку это следует за флагом --not
, это указывает rev-list
прекратить обработку после того, как он удалит любого родителя $COMMIT
. Это, по сути, просто оптимизация, потому что любое достижение, достигаемое из $COMMIT
, не может быть дочерним.
Примечание: предыдущая версия этого ответа указала tail -1
вместо grep "^$COMMIT"
. Это может работать в простом тестовом репо (именно поэтому я изначально сказал это), но нет гарантии, что git rev-list будет выдавать $COMMIT
last, если у вас есть ветки, которые не содержат $COMMIT
.