Как отменить "прервать: push создает новые удаленные головки на ветке" в меркуриальном
Я знаю Mercurial для начинающих: окончательное практическое руководство и ответы вроде Mercurial слияния веток? (прервать: push создает новые удаленные ветки)
Здесь я непреднамеренно создал ситуацию, когда Mercurial хочет создать новую удаленную головку. Каков наилучший способ отменить это, и оставить мало или совсем не видно этой ошибки на удаленной стороне?
###> hg push
pushing to http://example.com
searching for changes
abort: push creates new remote heads on branch 'default'!
(did you forget to merge? use push -f to force)
###> hg revert --all -r tip
###> hg update -C
0 files updated, 0 files merged, 0 files removed, 0 files unresolved
###> hg incoming
comparing with http://example.com
searching for changes
no changes found
###> hg summary
parent: 488:e3db024fe901 tip
Misc.
branch: default
commit: (clean)
update: 6 new changesets, 2 branch heads (merge)
###> hg pull
pulling from http://example.com
searching for changes
no changes found
###> hg glog
@ changeset: 488:e3db024fe901
| tag: tip
| summary: Misc.
|
o changeset: 487:b207579b9d41
| parent: 480:ce775708800c
| summary: Misc.
|
| o changeset: 486:59a7a5b34c7f
| | user: other
| | summary: fixes
| |
| o changeset: 485:b28264333e18
| | user: other
| | summary: binary
Если я сливаюсь, похоже вроде бы ОК:
hg merge
abort: outstanding uncommitted merges
Но hg diff
показывает всевозможные изменения, которые я не делал. Я готов повторно применить свои изменения... как я могу вернуть все это на один совет, отказавшись от всех локальных изменений?
Ответы
Ответ 1
Похоже, что когда вы сделали hg merge
, вы не сделали результирующий набор изменений.
Когда вы объединяетесь в другую ветку (в вашем случае вам может потребоваться указать hg merge 486
для слияния с другими изменениями пользователей), она объединяет эту ветвь в ваш рабочий каталог. Затем вам нужно проверить, разрешены ли все конфликты (если они есть) с помощью инструмента слияния или вручную отредактировать файлы (а затем запустить hg resolve
при любых конфликтах). Как только это будет сделано, вам нужно hg commit
создать новый объединенный набор изменений.
Это объясняет, почему hg diff
дает вам много изменений, которые вы не делали, - это изменения, сделанные на другой ветке, которые вы еще не совершили. Если вы запустите hg summary
или hg parents
в своем рабочем каталоге, вы увидите два родителя: 486
и 488
. Вы должны hg commit
создать этот рабочий каталог, создав новый объединенный 489
.
Если вы хотите отменить текущее слияние и начать заново, вы будете правы в попытке запустить hg update -C
, который вернет ваш рабочий каталог в исходное (немаркированное) состояние.
Если вы хотите избавиться от своих изменений (487
и 488
- вы заявляете, что не возражаете повторно применить свои изменения), самый простой вариант без использования расширений - это просто повторное клонирование хранилища и продолжите свою работу оттуда.
Ответ 2
Чтобы избавиться от изменений (например, 487 и 488):
Если вы чувствуете (как я), что повторное клонирование хранилища, как рекомендовано выше, и даже официально рекомендовано здесь, смешно, тогда вы должны получить MqExtension
После включения Mq вы можете легко удалить изменения, которые вам не нужны:
hg strip 487
hg strip 488
Ответ 3
Я не делал слияния, но внезапно я просматриваю сообщение, отправленное оператором. Когда я делаю hg pull, в командной строке отображается abort! Репозиторий по умолчанию не найден.