如何搭配HgGit使用hg amend避免unknown revision错误
解决Mercurial修改历史后推送至GitHub出现
abort: unknown revision错误的问题 问题现象
使用hg amend、hg rebase等修改历史的命令后,执行推送命令(如hg push -B my-branch)到GitHub的Git仓库时,会触发如下错误:
$ hg push -B my-branch pushing to git+ssh://git@github.com:... searching for changes abort: unknown revision 'xxxxx'!
原因分析
hg amend、hg rebase这类命令会重写本地提交历史,生成全新的修订版本ID。由于推送目标是Git仓库(通过hg-git扩展对接),此时本地Mercurial仓库的历史已与远程Git仓库历史分叉,远程仓库无法匹配到你本地新生成的修订ID,因此抛出未知修订错误。
解决方案
1. 强制推送覆盖远程历史
因为本地历史已被修改,必须让远程仓库接受新的历史,使用--force参数强制推送:
hg push -B my-branch --force
注意:若有其他协作者在该分支工作,强制推送会覆盖他们的本地修改,务必提前沟通确认。
2. 避免在已推送分支上修改历史
若分支已推送到远程,尽量避免使用amend、rebase这类改写历史的命令。如需调整提交,优先使用hg commit --amend修改最后一个未推送的提交,或用hg merge处理分支,保留历史完整性。
3. 检查并更新hg-git扩展
旧版本的hg-git扩展可能存在Git与Mercurial修订ID映射的bug,先查看扩展版本:
hg version --extensions
若版本较旧,通过包管理器或官方渠道更新该扩展。
内容的提问来源于stack exchange,提问作者Petr
相关产品推荐
相关产品推荐

