Mercurial: push creates new remote head

Если в Mercurial создать локальную ветку, сделать в ней какие-то изменения, а затем смержить их в default, то возникнет проблема. При следующем hg push выйдет сообщение, что невозможно выполнить push, так как это создаст новую удалённую ветку. Это весьма странное, на мой взгляд, отличие Mercurial от Git, который запросто позволил бы такое. Решается эта проблема просто. Переключитесь на ту ветку, которую создавали. Закройте её вот такой последовательностью команд:

Теперь нужно выполнить команду:

 

Но вообще официальная документация рекомендует несколько другой способ с созданием 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:

When you’ve cloned, verify that

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

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.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *