我有一个存储库的hg克隆,我已经在几个月内在本地进行了大量更改,并将它们推送到我的克隆版谷歌代码。不幸的是,作为一个菜鸟,我在默认分支上提交了一大堆更改。
现在我想确保我当前的默认值是完全上游的,然后我可以在默认情况下进行正确的分支,只能在分支上工作..
但是我怎么做那个清理呢?
作为参考,我的克隆是http://code.google.com/r/mosabua-roboguice/source/browse
PS:我用git解决了同样的问题并清理了它:Cleanup git master branch and move some commit to new branch?
答案 0 :(得分:2)
首先,提交默认分支时没有错误。您通常不希望为Mercurial中的每个任务创建单独的命名分支,因为命名分支是永久的。您可能希望查看更接近git分支的书签功能(“hg help bookmarks”)。因此,如果您现有的变更集唯一的问题是它们在默认分支上,那么它们确实没有任何问题。别担心。
然而,如果你真的想重新开始,明显的,直截了当的做法是从上游重新开始。您可以通过移动现有的回购和重新克隆来保持杂乱的变更集。然后将旧仓库中的变更集移植到您选择的分支上的新变更集中。
如果您不想花时间/带宽用于新克隆,则可以使用(高级,危险,不适合初学者)strip
命令。首先,您必须启用mq
扩展程序(谷歌或查看手册 - 我故意不在此解释它,因为它是危险的)。然后运行
hg strip 'outgoing("http://upstream/path/to/repo")'
请注意,我正在使用Mercurial 1.7中添加的revsets功能。如果你使用的是旧版本,那么就没有简单的方法了。
答案 1 :(得分:1)
前言 - 所有历史记录更改仅适用于未发布的回购。在编辑本地历史记录后,你必须从头开始推送到GoogleCode的repo(在GC上删除repo,创建空,推送) - 否则你将在默认分支中再增加一个HEAD
曼弗雷德
答案 2 :(得分:1)
最好的方法是使用两个克隆。使用远程仓库时,我无法控制我总是保留一个名为“virgin”的本地克隆,我不做任何修改。例如:
hg clone -U https://code.google.com/r/mosabua-roboguice-clean/ mosabua-roboguice-clean-virgin
hg clone mosabua-roboguice-clean-virgin mosabua-roboguice-clean-working
请注意,因为Mercurial对本地克隆使用硬链接,并且因为第一个克隆是带有-U
的克隆(没有工作目录(git术语中的裸存储库))这会占用 no 额外的磁盘空间。
在robo-guice工作中完成所有工作并拉入robo-guice处女,看看上游发生了什么,并再次使用roboguice工作以获得上游变化。
事实上,您可以通过创建远程仓库的新克隆来执行此类操作,如果磁盘空间很珍贵,请使用relink扩展来关联它们。
答案 3 :(得分:0)
也许你可以试试Convert extension。它可以使存储库处于更好的状态,同时保留历史记录。当然,在完成修改后,您将不得不删除旧的仓库并上传转换后的仓库。