Mercurial仓库添加subrepo出错致默认分支多HEAD,如何恢复单HEAD?
修复Mercurial仓库双HEAD问题(Rev 110添加subrepo出错)
别慌,完全不用重新创建仓库!你可以轻松把仓库恢复成单HEAD状态,我来一步步教你怎么做:
第一步:确认当前HEAD状态
先运行这个命令查看两个HEAD的具体信息,搞清楚哪个是你想保留的分支:
hg heads
执行后会列出所有HEAD的变更集ID、提交信息,你可以结合hg log进一步核对,找到Rev 110的变更集ID(假设是abc123,实际以你的输出为准)。
方案一:丢弃错误提交,回到Rev 110的干净状态
如果那4次subrepo提交完全是错误的,想彻底删掉它们:
- 先回到Rev 110的状态:
hg update -r abc123
- 移除Rev 110之后的所有错误提交(包括双HEAD分支):
hg strip -r "children(abc123)"
注意:如果你的Mercurial没启用
strip扩展,需要先在仓库的.hgrc文件里添加以下内容,再重新执行命令:[extensions] strip =
方案二:保留其中一个分支,合并解决双HEAD
如果其中一个HEAD的提交是有用的,想保留下来:
- 更新到你想作为主分支的HEAD:
hg update -r <你要保留的变更集ID>
- 合并另一个HEAD:
hg merge <另一个HEAD的变更集ID>
- 如果出现冲突,手动解决后提交合并:
hg commit -m "Merge to resolve dual HEADs caused by subrepo mistake"
执行完后仓库就会回到单HEAD状态。
重要提醒
- 操作前最好复制整个仓库文件夹做备份,万一操作失误还能恢复;
- 如果这是共享仓库,要确保其他协作者还没拉取这些错误提交,不然他们需要同步执行相同的操作来保持仓库一致。
内容的提问来源于stack exchange,提问作者Daniel Farrell
相关产品推荐
相关产品推荐

