Bitbucket/Mercurial: проблема с передачей именованной ветви (после закрытия предыдущей ветви с тем же именем)
Я пытаюсь отправить набор изменений, который содержит именованную ветвь, в репозиторий Mercurial, размещенный на Bitbucket, и я получаю push creates a new remote head (did you forget to merge?)
ошибка. Это происходит независимо от того, указываю ли я --new-branch
возможность hg push
,
(Документация Mercurial рекомендует в таком случае "тянуть и объединять перед нажатием", но когда я запускаю hg incoming
он сообщает "изменений не найдено", то есть в репозитории Bitbucket нет ничего, чего нет в моем локальном репо).
Как следует из названия, в моем сценарии есть морщина, которая может иметь отношение к наблюдаемому мной поведению, которое я попытаюсь объяснить ниже:
Название ветви, которую я пытаюсь отправить в репозиторий Bitbucket, фактически совпадает с именем ветви, которую я успешно перенес ранее, но затем закрыл с помощью hg commit --close-branch
потому что я ошибочно создал его с неправильной родительской ревизией.
(Это длинная история, почему новое имя ветки должно быть таким же, как и старое - но это так.)
Я не припоминаю никаких проблем с толканием ветви с первого раза. Я считаю, что я использовал hg push --new-branch
чтобы сделать это, но фактическая команда уже прокрутила верхнюю часть моего буфера истории командной строки, поэтому я не могу доказать это. Несмотря на это, --new-branch
вариант не решает проблему на этот раз.
Вот схема истории изменений:
0 0. Baseline of production code
|\
1 \ 1. Fixes to production code
| \
2 \ 2. More fixes to production code
/|\ |
3 | | | 3. Import new feature drop from offshore developer (*),
| | | | to named branch "drop1". (But I goofed! Parent
| | | | revision should have been r0.)
| | | |
4 | | | 4. "hg commit --close_branch" to prune the
| | | original "drop1" branch created in error.
| | |
| | 5 5. Import new feature drop again,
| | | this time with correct parent revision.
| | | Named branch via "branch -f drop1"
| | | (to shadow the name of the closed branch).
| \|
| 6 6. Merge bug fixes from production into drop1
| |
| 7 7. Fixes to drop1 code
|
8 8. Ongoing maintenance of production code
Я был в состоянии передать от r0 до r4 в репозиторий Bitbucket, но пытался подтолкнуть r5 (с или без --new-branch
вариант) дает мне:
abort: push creates new remote head 439d23090786 on branch 'drop1'!
(did you forget to merge? use push -f to force)
Итак, вопросы:
- У меня есть выбор, кроме как использовать
push -f
получить r5 в репозиторий Bitbucket? - Возможно ли, что версия Mercurial в Bitbucket не понимает, что оригинальная ветка drop1 была закрыта успешным нажатием r4, что вызвало
hg push --new-branch --rev 5
терпеть неудачу?
(*) Почему офшорный разработчик еще не использует Mercurial и Bitbucket напрямую, вместо того, чтобы посылать мне по электронной почте сообщения о сбрасывании кода в виде zip-архивов, рассказ слишком ужасный, чтобы рассказывать.]
1 ответ
Вы создаете вторую голову drop1, хотя другая закрыта. Просто используйте -f в качестве сообщения об ошибке.