Вопрос «от какой ветки» бессмысленен в Git, потому что ветки создаются только от какого-то коммита.
И тут нет такого маразма, как в Mercurial, что каждый коммит намертво привязан к какой-то ветке.
Вот типичная ситуация:
A - B - C - - - - J [master]
\
D - E - F - G [branch-A]
\
H - - I [branch-B]
А чтобы найти начало ветки, нужно определиться, какую другую ветку мы хотим считать родительской.
Тогда первый общий коммит находится легко, как мы видим на примере работы GitHub.
Например так
diff -u <(git rev-list --first-parent child_branch) <(git rev-list --first-parent parent_branch) | sed -ne 's/^ //p' | head -1