如何在 HgGit 中使用 `hg amend` 以避免 `unknown revision` 错误

问题描述 投票:0回答:1

每当我使用

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'!
git mercurial rebase mercurial-extension mercurial-amend
1个回答
0
投票

在 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)

您还可以测试schacon/hg-git/issues/298

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

hg rebase -b --keepbranch

或添加

.hgrc

[default]
  rebase= --keepbranch
© www.soinside.com 2019 - 2024. All rights reserved.