我在bitbucket上有一个开源项目。最近,我一直在研究一个实验性分支,我(无论出于何种原因)没有成为真正的分支。相反,我所做的就是使用书签。
所以我在同一版本中制作了两个书签
tip
标签切换到新的不稳定代码,当我真的宁愿它留在主要。通过执行hg update main
然后进行无关紧要的更改,我“切换”回主书签。所以,我用hg push -f
推送了这个,现在我的源代码控制在服务器上是“正确的”。
我知道应该有一种更简洁的方法来“切换”分支机构。这种操作将来我该怎么办?
答案 0 :(得分:1)
tip
在具有任何类型分支的存储库中不是一个广泛有用的概念。无论您使用书签,命名分支还是匿名分支,tip
始终表示任何分支上的最新提交,这很少是您关心的事情。解决问题的真正方法是不再担心tip
!
答案 1 :(得分:0)
我真的不明白你的问题,因为你正在切换(没有引号)分支,即使它们不是命名分支,当你使用书签时它们仍然是分支。
你犯的错误是一个诚实的错误,我认为没有办法让Mercurial再次使用书签(用不同的书签标记相同的版本并使用错误的书签进行标记)。我可以告诉你的是如何使用Mercurial 进行私人本地分支,这样你就可以避免产生后果:
Mercurial Phases 真的很甜蜜,让我快速解释一下。您可以将修订标记为三个称为阶段的特殊状态,它们是:secret,draft和public。
如上所述,默认情况下,所有本地修订都是 草稿,当您推送它们时,它们将变为 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
现在,你可以放弃那个分支并保持原样,它永远不会被推动。忘记它,甚至关闭它,这样当你列出你的分支时它不会打扰你。它不会被推,它不会被列出,所以不要担心它。
但是,如果你有OCD,只需在分支被打开的提交处剥离(hg strip
)分支,它就会消失:
hg strip 123
如果您已经有一个分支,您可以一次性修改几个版本:
hg phase <start revision>::<end revision> -sf
要使您的秘密分支草案或公开,只需将最新版本分阶段到这些阶段:
hg phase -d tip //assuming you are in the experiment branch
然后推,分支将公开。
Mercurial在改变历史的过程中变得越来越好,而没有改变它的劝阻的一般理念。阶段意在保护您免受意外的历史修改以及分享您不想要的内容。
就个人而言,我使用书签进行调试,以及何时我想尝试两种不同的做法。 对我来说,当您想要进行匿名分支(更新到以前的版本,提交并分叉历史记录)时,书签非常有用,但希望保持可理解的状态。