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

合并失误后恢复Mercurial Shelf及Unshelve出错后找回原补丁咨询

关于Mercurial暂存补丁(Shelf)的恢复方案

一、合并失误后,如何找回暂存补丁?

别慌!Mercurial的shelf补丁默认存在本地仓库的.hg/shelves/目录下,只要你没主动清理或删除这个目录,补丁文件就还在那里。具体操作:

  • 进入仓库根目录,查看shelves文件夹内容:ls .hg/shelves/(Windows用dir .hg\shelves),里面的文件就是暂存补丁——要么是自动生成的patch-xxxxxx格式,要么是你shelve时用--name指定的自定义名称。
  • 想确认补丁内容,直接执行hg cat .hg/shelves/[你的补丁文件名]就能查看完整代码。
  • 要重新使用补丁,直接运行hg unshelve [补丁名]即可,完全不受之前合并失误的影响。

二、Unshelve合并后发现错误,如何恢复原始补丁并重做?

分两种场景处理:

1. 还没提交合并后的修改

这是最容易解决的情况:

  • 执行hg update -C .,这个命令会强制将本地工作目录恢复到最近一次提交的状态,所有未提交的合并修改都会被丢弃。
  • 恢复后,原始shelf补丁依然完好保存在.hg/shelves/里,你可以重新执行hg unshelve,甚至先编辑补丁内容再重新合并。

2. 已经提交了合并结果

这时候需要先回滚提交:

  • 如果是刚提交不久,用hg rollback就能撤销最近一次提交,回到合并前的状态。
  • 如果提交已经过去一段时间,先通过hg log找到合并前的节点ID,再执行hg revert -r [节点ID] --all,将工作目录恢复到那个状态。
  • 无论哪种方式,原始的shelf补丁都还在.hg/shelves/中,你可以重新进行unshelve操作。

几个实用小技巧

  • 执行unshelve前,先用hg unshelve --dry-run预览补丁会修改哪些文件,提前规避可能的合并冲突。
  • 若要修改已存的shelf补丁内容,直接编辑.hg/shelves/下的对应文件即可,部分新版本Mercurial也支持hg shelve --edit [补丁名]命令。
  • 谨慎使用hg unshelve --clean,这个参数会在unshelve完成后直接删除shelf里的补丁文件,除非你确定以后再也不需要它。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:57:55