在 Mercurial 中回滚多个提交(在推送到公共之前)
Posted
技术标签:
【中文标题】在 Mercurial 中回滚多个提交(在推送到公共之前)【英文标题】:Rollback multiple commits (before Pushed to public) in Mercurial 【发布时间】:2011-06-22 22:39:47 【问题描述】:我知道回滚可以从本地存储库中的最新变更集中删除提交。但是,是否可以删除自上次推送以来的所有最新提交,而无需重新克隆共享存储库?
【问题讨论】:
【参考方案1】:您可以使用hg strip
命令,它是mq
扩展的一部分:
hg strip REV
这将删除该修订及其所有后代。
在您尝试之前,请复制/克隆存储库以进行试验。
【讨论】:
我相信这应该是问题的真正答案。另一个是回购的克隆,特别要求不要成为原始问题中的选项(“无需重新克隆”)。当我在寻找与原始帖子相同的解决方案时,这确实回答了我的问题,而另一个不是由于克隆...如果另一个是原始发帖人想要的答案,则应该更新问题以反映这一点并提供帮助搜索时的人? 我同意 GazB 的观点 Hg Wiki for Strip 上提供了有关如何启用Strip
扩展的说明。【参考方案2】:
您可以使用hg clone
创建一个新的回购:
hg clone -r last_good_changeset localrepo newlocalrepo
【讨论】:
这是我最喜欢的答案,因为它不需要任何扩展。人们可以轻松地克隆一个 repo 的一个子集,而且几乎是瞬间完成的。 @Ry4an... 刚刚意识到您实际上已经回答了这个问题:***.com/questions/4172753/…!对您的原始答案 +1 ;) 嘿,不用担心。我对这些事情做得更好,我会尝试将问题重复。 我已经尝试过这个解决方案,但它失败并出现错误conq: invalid repository syntax.
strip
为我工作。
这不属于“无需重新克隆”的原始问题要求没有吗? :|【参考方案3】:
如果您使用的是 mercurial eclipse,您可以回滚一次,然后搁置这些更改,然后将多个连续提交作为补丁导出,剥离这些提交,然后以相同的顺序导入这些补丁,以防补丁冲突,它们以所需的方式相互覆盖。
最后,您可以取消搁置您的第一次回滚。这实现了与您多次回滚相同的效果。
【讨论】:
以上是关于在 Mercurial 中回滚多个提交(在推送到公共之前)的主要内容,如果未能解决你的问题,请参考以下文章
Spring - 事务应该在一种方法中提交,但应该在执行数据库事务的其他方法中回滚