Бьюсь над логической задачей. Возможно, у меня больше проблема в понимании терминологии, чем в самом алгоритме.
Есть дерево коммитов. Вот такое, например:
E-F
/ \
A-B-C-D-G
На основе коммита B была создана отдельная ветка, а затем коммиты F и D слили в G.
Общим предком для F и D является B, это очевидно. А что является общим предком для D и G? Является ли D предком для D, или общий предок у них B? Сбивает с толку, что «дерево» в CVS не является как таковым деревом из теории графов - так как тут возможны слияния (циклы).