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

#mercurial #dvcs #branching-and-merging #bitbucket

#mercurial #dvcs #ветвление и слияние #bitbucket

Вопрос:

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

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

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

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

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

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

Комментарии:

1. вам не хватает ссылки на слово «это»?

2. Упс, опечатка. Должно было быть «его». Я пошел дальше и нажал ( hg push -f ), и, похоже, это сделало именно то, что я хочу. Единственная сложность заключалась в том, что моя «закрытая» ветка (которую, вероятно, на самом деле не нужно было закрывать) имела последний коммит и, следовательно, стала подсказкой. Я просто внес тривиальное изменение в «открытую» головку, и это исправило это.

3. Да, вам действительно нужен другой коммит, чтобы стать подсказкой. Помните, что вы всегда можете выполнить нажатие на клон целевого репозитория, чтобы посмотреть, будет ли он делать то, что вы хотите. Вы также можете использовать hg исходящий, чтобы увидеть, что будет отправлено заранее.

4. Это хороший момент — я об этом не подумал. Я скрестил пальцы при нажатии, но я думаю, что ваш способ, вероятно, лучше 😉

Ответ №1:

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

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

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

У вас останется только один заголовок, и в нем будет только его содержимое, но ваше по-прежнему доступно в истории.

Комментарии:

1. Спасибо — это похоже на то, что я пытался сделать, так удобно знать! Хотя я думаю, что в данном случае закрытие ветки, вероятно, было более уместным, поскольку новая объединенная версия не содержала функциональности из моей (закрытой) ветки