Pet*_*lák 5 git mercurial rebase mercurial-extension mercurial-amend
每当我使用hg amend
或其他更改历史记录的命令(例如hg rebase -s ... -d ...
)时,某些命令(包括hg push
开始)会失败并出现abort: unknown revision
错误:
$ hg push -B my-branch
pushing to git+ssh://git@github.com:...
searching for changes
abort: unknown revision 'xxxxx'!
Run Code Online (Sandbox Code Playgroud)
在 Mercurial (Hg) 中使用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)
Run Code Online (Sandbox Code Playgroud)
您还可以测试schacon/hg-git/issues/298
可以通过以下命令解决问题:
Run Code Online (Sandbox Code Playgroud)hg rebase -b --keepbranch
或添加
.hgrc
Run Code Online (Sandbox Code Playgroud)[default] rebase= --keepbranch