如何将“hg amend”与 HgGit 一起使用以避免“未知修订”错误

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)

Von*_*onC 1

在 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

可以通过以下命令解决问题:

hg rebase -b --keepbranch
Run Code Online (Sandbox Code Playgroud)

或添加.hgrc

[default]
  rebase= --keepbranch
Run Code Online (Sandbox Code Playgroud)