You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Hg中撤销已推送的错误合并?

解决Mercurial无法撤销合并变更集的问题

因为Mercurial的hg backout不支持直接撤销合并变更集,结合你当前无其他开发者在my-client分支工作的情况,可以用以下几种方法解决:

方法一:用hg strip彻底移除合并变更集

这个方法会直接删除合并变更集及之后的相关提交,需要先启用strip扩展:

  1. 检查本地Mercurial配置文件(.hgrc或Mercurial.ini),确保[extensions]区块下有strip =(没有的话添加该行)
  2. 执行命令移除合并变更集:
    hg strip <错误合并的版本号>
    
  3. 强制推送覆盖远程仓库的my-client分支:
    hg push -f my-client
    

方法二:用hg revert创建撤销提交

这个方法会保留合并的历史记录,新增一个恢复到合并前状态的提交:

  1. 先找到合并前my-client分支的版本号:执行hg log -r <错误合并的版本号>,查看该合并变更集的父节点,选择属于my-client分支的那个版本号(记为PREV_REV)
  2. 恢复所有文件到合并前的状态:
    hg revert -r PREV_REV --all
    
  3. 提交恢复操作:
    hg commit -m "Revert incorrect merge of new-feature into my-client"
    
  4. 推送到远程仓库:
    hg push my-client
    

方法三:用hg rollback撤销最后一次操作(仅限刚推送完的场景)

如果合并并推送后,你没有在本地执行其他Mercurial操作,可以用这个快速方法:

  1. 执行回滚命令撤销合并提交:
    hg rollback
    
  2. 强制推送覆盖远程分支:
    hg push -f my-client
    

注意事项

  • 因为当前无其他开发者在my-client分支工作,强制推送是安全的;后续如果有开发者拉取该分支,需要让他们重置本地分支或重新克隆仓库
  • 使用strip前建议备份仓库,避免误删重要提交
  • revert方法不会删除历史,适合需要保留操作痕迹的场景;strip则会彻底清除合并记录,更彻底

内容的提问来源于stack exchange,提问作者Jisson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 18:42:42