Вы не можете добавить f1 к f3 в буквальном смысле истории / предка без фундаментального изменения f3, потому что каждая ревизия в mercurial идентифицируется с помощью хеш-кода, и этот хеш-код создается из (среди прочего ) содержание ревизии и хешей ее родителей. Таким образом, изменение родителя первого узла f3 изменит все хеш-коды f3.
Таким образом, вы можете добавить f1 к f3, если хотите регенерировать f3 в процессе, дающем, скажем, f4. Это сделало бы недействительными все клоны f3, но если вы команда из одного человека, с вами все будет в порядке.
Если вы не согласны с изменением каждого хэша в f3 (и я бы не стал), другой (не очень хороший) вариант - использовать hg convert
для создания нового ртутного репо из f1, назовем его f5, а затем hg pull -f
f5 в f3. Поскольку никакие изменения в f5 не были бы предком или потомком какого-либо изменения в f3 - никакой общей линии - у вас получилось бы две головы и два потока наборов изменений. Некоторые люди делают это, но, честно говоря, я не вижу никакой реальной выгоды в этом.
Где бы я ни был, я просто конвертировал бы f1 в f5 (ртутный репо со всей вашей старой историей), а затем держал его для справки.