Mercurial:在`default`分支上放弃多个连续的提交

时间:2014-05-20 13:34:46

标签: mercurial dvcs

要求

我想放弃default分支上的一系列开发,回到大约15个更改集的修订版,然后default从那里开始。

我的设置

这是一个独立开发项目,其中一个人很少进行测试。我(经常)推送到bitbucket进行备份并与测试人员共享。我想放弃的一些改变被推送到BitBucket。

选项

任何这些都没问题......

  1. 废弃的变更设置继续存在于回购中。如果他们可以生活在他们自己的分支abandoned-experiment-1上,比如我可以关闭并忽略它,那将是很好的,但这需要他们转移到一个回顾性创建的分支(这似乎是一个很棒的功能?)。

  2. 在我向default添加新版本的情况下会发生某种合并,这是我要继续修订的修订版。

  3. 更改设置被销毁,但我怀疑如果没有更换BitBucket repo和我的测试人员的回购,我没有办法实现这一点,我并不热衷于此。

  4. 我不太清楚如何评估哪些选项可行,哪种选择最佳,或者是否有其他更好的选择。我还不确定如何实际进行回购更新!

    谢谢。

2 个答案:

答案 0 :(得分:3)

你有几个选择(请注意,我假设您在15个左右的修订版中没有所有更改,而不是试图保留它们中的一小部分):

最简单的有点#2:你可以close anonymous branches就像命名分支一样;如果您愿意,请先使用abandoned-development标记提示; hg update到了你希望继续的地步;并继续正常编码。 (在关闭旧开发之前,您可能需要为新开发创建新头。我还没有测试过。)

关于#3:根据我的粗略阅读,看起来确实是bitbucket has a strip command。如果你(本地和bitbucket)和你的测试人员剥离了令人讨厌的变更集,你可以继续你的快乐方式并假装他们从未存在过。

实现#1:如果你肯定已经开始将它们带到一个命名分支,你可以在远程repos上剥离它们,然后hg rebase将它们放到一个新的分支上,然后关闭那个分支。

就个人而言,我尽量避免弄乱历史,所以我会选择最简单的。

答案 1 :(得分:1)

Mercurial现在有changeset evolution的(实验性)支持。那就是你可以放弃或改变已推动的变更集。在内部,这通过隐藏过时的变更集来起作用(即实际上没有任何东西被剥离,只有新的替换修订版被添加到历史记录中,这就是为什么它适用于多个克隆)。

要扩展@ Edward的建议,你还可以更新到最后的好的版本,继续从那里提交然后合并到 bad 使用null-merge进行更改集:

hg up <good-revision>
... work ... commit ...
hg merge <head-of-bad-revisions>
hg revert --all -r .
hg commit -m 'null-merge of abandoned changesets'

这可能是您认为的选项2。