每当我使用
hg amend
或其他更改历史记录的命令(例如 hg rebase -s ... -d ...
)时,某些命令(包括 hg push
)开始失败,并出现 abort: unknown revision
错误:
$ hg push -B my-branch
pushing to git+ssh://[email protected]:...
searching for changes
abort: unknown revision 'xxxxx'!
hg amend
或其他历史更改命令 时,尤其是使用 HgGit 扩展 与 Git 存储库交互时,您可能会遇到 abort: unknown revision 'xxxxx'!
错误:通常,这是因为这些操作重写历史记录,这可能会混淆 Mercurial 变更集和 Git 提交之间的映射。
为避免此问题,当您需要修改提交或变基时,请按照以下步骤操作:
小心使用
hg commit --amend
:确保只修改尚未推送到 Git 存储库的提交。修改已推送的提交可能会在本地存储库和远程 Git 存储库之间造成差异。
修改后立即推送更改:如果您要修改的提交属于尚未推送到远程 Git 存储库的一系列提交的一部分,请在修改后立即推送更改,以尽量减少差异。
重新创建映射:如果您已经遇到了
unknown revision
错误,您可能需要重新创建 Mercurial 存储库和 Git 存储库之间的映射。这可能涉及再次从 Git 存储库中拉取,或使用 hg strip
在本地删除有问题的提交,然后重新应用您的更改。
如果您了解其影响并确定不会影响其他用户(例如,在个人项目中),您可以使用
hg push --force
覆盖远程存储库。使用这种方法要非常谨慎,因为它可能会导致其他人失去工作。
# Option 1: Force push (caution)
$ hg push -B my-branch --force
# Option 2: Fix the mapping (more complex, might involve pulling and merging)
您还可以测试schacon/hg-git/issues/298
可以通过以下命令解决问题:
hg rebase -b --keepbranch
或添加
.hgrc
[default] rebase= --keepbranch