我不太明白你的问题,因为你正在切换(不带引号)分支,即使它们没有命名分支,当你使用书签时它们仍然是分支。
你犯的错误是一个诚实的错误,我认为没有办法让 Mercurial 保护你免于使用书签再次这样做(用不同的书签标记相同的 rev 并使用错误的书签提交)。我可以告诉你的是如何使用 Mercurial 进行私有本地分支,这样你就可以避免产生刚刚产生的后果:
您使用命名的分支和阶段
Mercurial Phases真的很甜蜜,让我快速解释一下。您可以将修订标记为三个称为阶段的特殊状态,它们是:秘密、草稿和公开。
- 秘诀:不要被推。可以通过历史编辑进行修改。
- 草稿:被推。可以通过历史编辑进行修改。这是任何修订的默认状态。
- public:被推送。在对它们使用历史编辑扩展(strip、rebase、histedit...)时会发出警告。
如前所述,默认情况下,所有本地修订都是草稿,当您推送它们时,它们会变为public。您可以使用该hg phase
命令标记对特定阶段的修订,但如果您要从 #3 到 #2,或从 #2 到 #1(根据之前的编号),则需要 -f 参数来强制更改, 这是:
秘密-->草稿-->公开
要向左移动,您需要使用 --force 或 -f。
这是你要做的:
hg branch experiment
hg commit -m "Opening experimental branch" //say this creates revision 123
hg phase -sf tip //s is for secret, f is for force
//... hack hack hack
hg commit -m "Uh oh screwed up here"
hg push //no secret revisions are pushed
现在,您可以放弃该分支并保持原样,它永远不会被推送。忘记它,甚至关闭它,这样当你列出你的分支时它就不会打扰你。它不会被推送,也不会被列出,所以不要担心。
但是,如果您有强迫症,只需hg strip
在打开分支的提交处剥离 () 分支,它就消失了:
hg strip 123
如果您已经有一个现有的分支,您可以像这样一次分阶段进行多个修订:
hg phase <start revision>::<end revision> -sf
要使您的秘密分支草稿或公开,只需将最新修订分阶段到这些阶段:
hg phase -d tip //assuming you are in the experiment branch
然后推送,分支就会公开。
Mercurial 在修改历史方面变得越来越好,而没有改变它不鼓励这样做的一般哲学。阶段旨在保护您免受意外的历史修改以及共享您不希望的内容。
*我*如何使用书签
就个人而言,我使用书签进行调试以及当我想尝试两种不同的方式来做一件事时。对我来说,当你想做匿名分支(更新到以前的版本、提交和分叉历史)但又想让事情变得容易理解时,书签很有用。