Mercurial - несколько головок - как отказаться от одной головы и взять другую в качестве подсказки/по умолчанию?

Я разветвил чужой репозиторий на Bitbucket и внес некоторые изменения (и отправил их в свой разветвленный репозиторий). Тем временем первоначальный автор внес существенные изменения (почти переписал).

Я хочу обновить свое репо, чтобы оно было точно таким же, как у него (но с моими изменениями, все еще присутствующими в этом теге), таким образом, чтобы он мог легко получить мои новые изменения без того, чтобы предыдущие изменения, которые я сделал, ни на что не влияли.

Я перенес его изменения в свою локальную версию, что оставило меня с двумя головами. Я хочу просто взять его голову в качестве наконечника/по умолчанию. Я попытался решить эту проблему (на основе некоторых ответов SO), выполнив следующие действия:

hg update -r [myrev]
hg commit --close-branch
hg update -r [hisrev]

Это, казалось, привело меня в желаемое состояние. Мой рабочий каталог выглядит как его. Однако, когда я попытался hg push, мне сказали, что это создаст несколько удаленных головок, и я не уверен, что это то, что я хочу (сообщение звучит пугающе!)

Итак, я сделал это правильно? Должен ли я форсировать толчок? Будет ли это делать то, что я хочу (например, сохранить копию моих изменений, чтобы я мог получить к ним доступ, но таким образом, чтобы это не мешало?). Если да, то был ли это лучший способ добиться этого?


person Danny Tuppeny    schedule 21.05.2011    source источник
comment
вам не хватает ссылки на слово это?   -  person Mark Heath    schedule 21.05.2011
comment
Ой, опечатка. Должен был быть его. Я пошел вперед и нажал (hg push -f), и, похоже, это сделало именно то, что я хочу. Единственная сложность заключалась в том, что моя закрытая ветка (которую, вероятно, не нужно было закрывать) имела последний коммит и поэтому стала наконечником. Я просто внес тривиальное изменение в открытую головку, и это исправило это.   -  person Danny Tuppeny    schedule 21.05.2011
comment
Да, вам нужен еще один коммит, чтобы стать подсказкой. Помните, что вы всегда можете потренироваться на клоне целевого репозитория, чтобы увидеть, будет ли он делать то, что вы хотите. Вы также можете использовать hg outgoing, чтобы увидеть, что будет отправлено заранее.   -  person Mark Heath    schedule 21.05.2011
comment
Это хороший момент - я не думал об этом. Я скрестил пальцы, когда нажимал, но я думаю, что ваш способ, вероятно, лучше;)   -  person Danny Tuppeny    schedule 21.05.2011


Ответы (1)


Головки в закрытой ветке по-прежнему остаются головками, поэтому, если вы хотите внести эти изменения, вам понадобится --force.

Другой вариант — объединить этот заголовок с тем, что вы хотите использовать в качестве ветки по умолчанию, но не выбирать ни одно из его изменений. Это можно сделать неинтерактивно, используя:

hg update [hisrev]
hg --config ui.merge=internal:local merge [myrev]
hg commit

Вы опуститесь на одну голову, и в ней будет только его содержание, а ваша еще доступна в истории.

person Ry4an Brase    schedule 21.05.2011
comment
Спасибо - это похоже на то, что я пытался сделать, так удобно знать! Хотя я думаю, что в этом случае закрытие ветки, вероятно, было более уместным, поскольку новая объединенная версия не содержала функциональности из моей (закрытой) ветки. - person Danny Tuppeny; 22.05.2011