【问题标题】:HG: Undo a commit from historyHG:撤消历史中的提交
【发布时间】:2011-08-20 06:47:50
【问题描述】:

我有一个 HG 存储库,版本为 1、2、3、4、5 和 6。

当我提交第 4 版时,我不知不觉地在第 3 版中搞砸了一些我不应该做的更改。直到第 6 版已经提交,我才注意到这一点。

我需要撤消第 4 版中的更改,然后重新应用所有其他更改。基本上撤消提交#4。我该怎么做?

【问题讨论】:

    标签: mercurial tortoisehg


    【解决方案1】:

    你想要hg backout

    恢复/撤销之前changeset的效果...

    回退通过应用与要回退的变更集相反的变更集来工作。新的变更集提交给repository,并最终合并...

    【讨论】:

    • 一旦我使用回退,如何重新应用因回滚而分别被撤销的变更集 5 和 6?那是我很困惑的部分。有什么建议吗?
    • backout 在 5,6 之后创建一个新的变更集,实际上是 4 的倒数。您不需要重新应用 5 和 6
    • hg backout -r 4 将反转修订版 4 中所做的更改,而不会触及修订版 5 和 6 中所做的更改。帮助系统提供了一个很好的概述 (selenic.com/hg/help/backout)。
    • 退出工作。这是我使用的命令: hg backout --merge -r 4 --parent 3
    • 如果您在答案中添加更多信息,而不仅仅是链接,这可能会非常好。例如,您可以添加@TimHenigan 评论。
    【解决方案2】:

    您可以使用 MQ 扩展:

    hg qinit
    hg qimport -r 4:tip
    hg qpop -a
    hg qdelete 4.diff
    hg qpush -a
    hg qfinish -a
    

    以上是你改写历史的方式,这是你想要的我相信的。

    您也可以使用hg backout,但这会撤消工作目录中的提交,您可以提交。

    【讨论】:

    • 我会这样做当且仅当我知道我的存储库中的变更集最后一次与其他人共享是变更集 3 或更早版本。否则,当您在变更集 4、5 和 6 中引入相同更改的新版本时,您会遇到令人讨厌的合并问题。
    • 这是给定的。重写历史总是最后的手段,尤其是在你分享它的时候。
    猜你喜欢
    • 2012-05-03
    • 2021-06-25
    • 2017-06-16
    • 2012-05-20
    • 2020-03-24
    • 1970-01-01
    • 2012-11-29
    • 2017-03-07
    • 1970-01-01
    相关资源
    最近更新 更多