Ответ 1
Вы можете просто поместить изменения в один большой репозиторий. Начните с A repo:
$ hg init combined
$ cd combined
$ hg pull ../A
$ hg update
Затем принудительно втяните в B и манекен-слияние двух головок, чтобы вы сохранили файлы с B:
$ hg pull ../B --force
$ hg merge --tool internal:other
$ hg revert --all --rev tip
$ hg commit -m "Merge A and B, kept B"
Затем повторите для C:
$ hg pull ../C --force
$ hg merge --tool internal:other
$ hg revert --all --rev tip
$ hg commit -m "Merge B and C, kept C"
Это дает вам три строки истории и точку слияния, где вы сначала выбрасываете A, затем B и, наконец, получаете C.
В качестве альтернативы вы можете использовать расширение конвертации с помощью карты сплайсов, чтобы объединить три истории вместе. Начните с принудительного вытягивания всех наборов изменений в один репозиторий. Затем выполните преобразование Mercurial в Mercurial, где вы добавляете кончик A в качестве первого родителя корня B. Аналогично для B и C. Это дает вам одну длинную историю, где произойдет очень резкое изменение, когда вы переходите от A до B и от B до C.
Я бы выбрал первый вариант: он наиболее явный и показывает лучшее, что происходит, не притворяя (конвертируя) историю.