在Mercurial中清除修订历史记录

时间:2011-09-14 09:19:20

标签: mercurial

我是Mercurial的新手,我仍在尝试建立工作流程。

我克隆了一个远程存储库。然后我进行更改并提交到我的本地存储库。我想推出一个干净的修订历史。我不想推动一些可能只会混淆远程存储库的修订(例如,方法的错误重命名,添加javadoc,删除空格等)。这可能吗?

谢谢!

4 个答案:

答案 0 :(得分:8)

确实有些情况下修剪/剥离/修改变更集或分离私有/进行中和公共/准备好的更改是有意义的。以下是如何使用Mercurial处理此问题的一些建议:

  1. 如果您进行了一系列小型提交(这是一件好事),但您更愿意将它们作为一个变更集发布(如果您承诺 - 可能与之相反 - 快照更改集有意义),请使用 collapse 扩展名:

    $ hg collapse -r <first-ref>:<last-ref> # both revs including
    
  2. 如果您想要保密,而您想要发布其他人,则(a)使用 mercurial queues 进行私密更改或(b)将您提交给私有更改自己的分支named, bookmarked, or cloned)并定期将其与公共分支合并。如果你交替进行私人和公共更改,后者要求你经常在分支之间切换。


  3. <强>更新

    为了说明选项2.b,请考虑这个变更集图表:

    0--1--4--5---8--9   <= public/stable branch
        \     \
         2--3--6--7     <= private/dev branch
    

    这意味着您已在 dev 分支上进行了更改23。然后,您在 stable 分支上做了一些工作(修订版45)。这些更改在 dev 中也有意义,因此您将它们合并到 dev (修订版6)中。最后,您在 dev (修订版7)中进行了另一项实验性更改,并在 stable (修订版8和{{ 1}})。您现在可以通过运行

    发布(即推送到远程存储库) stable 中所做的更改
    9

    所有私人更改都将保留在本地!

    请注意,如果您计划稍后修改私有提交(例如将它们折叠为一个更改集),则不得在稳定分支中合并(折叠无法跨合并)。相反,rebase只要您希望它们与 stable 中的最新更改同步,您就会进行私密更改。

答案 1 :(得分:2)

这是一个关于修订控制系统的问题,而不是关于修订控制系统的问题。就个人而言,我会推动一切,你所建议的有点违背版本系统的目的。

但是,如果您想了解有关hg工作流程的更多信息,请尝试查看此guide或此wiki

您可能还对rollback命令感兴趣,该命令可以修复最新的提交。

编辑:我要选择的选项是保留两个分支:一个与远程存储库相同,您只提交“官方”更改,另一个用于合并新的官方提交并进行额外添加私人提交。

答案 2 :(得分:1)

如果最后发生了所有寄生变化,你可以简单地剥离它们。

如果没有,您可以尝试使用Patch Queue删除不必要的提交:

  • 将您的更改逐个导入MQ并取消应用修补程序
  • 删除与您不想要的更改匹配的修补程序
  • 重新应用剩余的补丁

这适用于小型提交。如果您尝试这样做,请在本地仓库的克隆上进行,以避免丢失。

另外,请注意不要改变已经“共享”(推送)的历史记录。

答案 3 :(得分:0)

Histedit也可用于编辑历史记录的解决方案(比MQ)更简单

相关问题