Как только нажать на одну ветвь в Hg?

У меня есть репозиторий Hg с тремя ветвями в нем, но два из них неактивны (поскольку я уже объединил их в свою ветку по умолчанию). hg head показывает 3 головки, по одной для каждой ветки, хотя ветки hg показывают 2 из этих ветвей как "неактивные".

Когда я пытаюсь нажать мою ветку по умолчанию (используя hg push --branch default http://...) на другое репо, слияние отменяется с сообщением "abort: push создает новые удаленные ветки:!"

На страницах Hg push man: "По умолчанию push не позволит создавать новые главы в пункте назначения, так как несколько головок будут неясны, какую головку использовать. В этой ситуации рекомендуется потянуть и слить толкая".

Я уже это сделал, но я все еще не могу нажать "default", не прерывая его.

Любая помощь приветствуется. Спасибо!

Ответ 1

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

Итак, попробуйте:

hg push --branch default --new-branch

в котором говорится: "Да, я знаю, что это нажатие отправляет по имени ветки, которое ранее не было ранее удаленной репо" (для этого также требуется Mercurial 1.6 или более поздняя версия IIRC) >

Кроме того, вы можете взять эти неактивные головки и сделать их закрытыми головами:

hg update thebranch
hg commit --close-branch -m 'closing'

Поскольку "названные ветки навсегда", многие люди предпочитают резервировать их для долговечных концепций, таких как "стабильный" и "экспериментальный", и использовать закладки, анонимные ветки или клоны для функций, выпусков и других преходящих вещей. См. Это для guide для этих других опций.

Ответ 2

Чтобы нажимать одну ветвь, вы просто используете -b

hg push -b myBranch

Что касается конкретной проблемы, вы можете посмотреть в закрывающие ветки. Я знаю, что SourceTree предлагает его, но я не уверен в специфике

Ответ 3

Вы можете заставить его!

Вот как:

1. Pull from your repository
2. hg push --rev nnn -f (replace nnn with your Rev # of your working branch)
3. do NOT force before PULLing. if you do things will get out sync and you are screwed

Если вы используете что-то вроде RhodeCode, тогда проверьте его после принудительного его использования, и вы увидите, что у вас есть последняя ветка.

Однако я думаю, что позже Mercurial попросит вас снова нажать другую ветку, даже если вы ее закроете, Mercurial попытается создать эту ветку на сервере.

Я тоже пользователь Git и столкнулся с той же ситуацией, потому что клиент использует Mercurial, но я хотел бы использовать стиль рабочего процесса Git.

Я думаю, что это выполнимо, но я еще не понял 100%.