在 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 中回滚多个提交(在推送到公共之前)的主要内容,如果未能解决你的问题,请参考以下文章

你如何在 Mercurial 上“回滚”最后一次提交?

在 PyMySQL 中回滚多个查询

Spring - 事务应该在一种方法中提交,但应该在执行数据库事务的其他方法中回滚

在 MS Access 中回滚多个 SQL 更新查询

在推送到 Codecommit 时需要特定的提交消息 AWS Lambda

事务无法在 codeigniter 中回滚