Не прибегая к EditingHistory (который, как правило, рекомендуется, и, безусловно, противоречит целям разработки «неизменной истории»), эти изменения навсегда останутся в вашей истории. Однако вы можете отменить их в своей ревизии «tip» и затем перетянуть их обратно в несколько последующих наборов изменений, распределенных по нескольким ветвям.
Давайте представим, что это ваша текущая история:
[R0] -> [R1] -> [R2] -> [R3]
Где в ревизиях R2 и R3 есть что-то, что вы хотели в ветке по умолчанию, а что-то, что вы хотели, было в другой ветке. Вы можете создать новую ревизию, R4, которая отменяет R2 и R3. Это можно сделать с помощью возврата, как вы предлагаете, или поскольку вы делаете несколько наборов изменений, возможно, проще с помощью 'revert'.
hg update tip ; hg revert --all -r R2 ; hg commit -m 'undid changes R2 and R3'
тогда ваша история будет выглядеть так:
[R0] -> [R1] -> [R2] -> [R3] -> [R4]
затем вы можете разделить свою работу на наборы изменений, которые вы хотели бы сделать изначально, получив историю, подобную этой:
[R0] -> [R1] -> [R2] -> [R3] -> [R4] -> [R5] -> [R7]
\
--> [R6] -> [R8]
R6 и R8 могут находиться в ветви с именем 'default' или в другой именованной ветви. В любом случае, вы можете протолкнуть только R0 через R5 и R7, выполнив:
hg push -r R7
Это работает, потому что push выдвигает ревизию и всех ее предков - но R6 и R8 не являются предками R7, поэтому они не будут выталкиваться, независимо от того, на какой ветке они находятся.