Как нажать только на одну ветку в Hg? - PullRequest
52 голосов
/ 03 февраля 2011

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

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

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

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

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

Ответы [ 3 ]

57 голосов
/ 03 февраля 2011

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

Поэтому попробуйте:

hg push --branch default --new-branch

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

Также вы можете взять эти неактивные головы и сделать их закрытыми головами с помощью:

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

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

32 голосов
/ 05 февраля 2014

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

hg push -b myBranch

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

0 голосов
/ 24 сентября 2013

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

Вот как:

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%.

...