Как я могу "разделить ветку дальше" в Mercurial? - PullRequest
3 голосов
/ 21 июня 2010

По общему признанию вводящее в заблуждение название, но я не знал, как это лучше выразить.

Так что я допустил ошибку, отправив все изменения, относящиеся к моему проекту, ДО того, как открыл филиал Таким образом, в ветви по умолчанию не существует набора изменений, который там не принадлежит. Они должны быть в моем недавно открытом филиале.

Должен ли я сначала отменить все наборы изменений, а затем снова отправить их в нужную ветвь? Это вообще работает?

Спасибо за вашу помощь.

1 Ответ

6 голосов
/ 21 июня 2010

Не прибегая к 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, поэтому они не будут выталкиваться, независимо от того, на какой ветке они находятся.

...