Если в Mercurial создать локальную ветку, сделать в ней какие-то изменения, а затем смержить их в default, то возникнет проблема. При следующем hg push выйдет сообщение, что невозможно выполнить push, так как это создаст новую удалённую ветку. Это весьма странное, на мой взгляд, отличие Mercurial от Git, который запросто позволил бы такое. Решается эта проблема просто. Переключитесь на ту ветку, которую создавали. Закройте её вот такой последовательностью команд:
1 2 3 |
hg up -C my_badbranch hg commit --close-branch -m 'close badbranch, this approach never worked' hg up -C default |
Теперь нужно выполнить команду:
1 |
hg push --new-branch |
Но вообще официальная документация рекомендует несколько другой способ с созданием backup и каких-то манипуляций, которых я пока не понял.
Официальная документация:
https://mercurial.selenic.com/wiki/PruningDeadBranches
Если коротко, то там написано, что существует несколько путей решения проблемы. Но самый лучший вот такой:
The recommended procedure to really eliminate unwanted heads is to use hg clone --rev. First, you rename your current repo to a backup. Then you clone the backup back to the original name, but you specify --rev X where X is the parent of the first of the chain of wanted changesets. If your repository has other heads you need to preserve, specify them too, as additional --rev Y arguments. For example:
1 |
<span id="line-1-3" class="anchor"></span>hg clone backup repo --rev X --rev Y |
When you’ve cloned, verify that
1 |
<span id="line-1-4" class="anchor"></span>hg incoming -R repo backup |
really only shows the changesets you wanted to drop. If you discover changesets you do need, after all (for instance, another head you forgot to specify above), you can pull them over using
1 |
<span id="line-1-5" class="anchor"></span>hg pull -R repo backup --rev Y |
Repeat until you’re satisfied with the pruned repo.
Copy over all non-tracked files you might want to preserve. In particular, you might want to copy .hg/hgrc from the backup since your default path now points to the backup instead of the original clone source.
You can remove your backup repository now.