Как только нажать на одну ветвь в 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%.