有没有一种方法可以删除所有之前提交的代码的 gpg 签名,或者重新使用另一个 gpg 密钥进行签名?

5

我刚刚不小心丢失了我的旧gpg密钥。我想知道是否可以移除每个提交的gpg签名,或使用我的新gpg密钥重新签署它?


2
你尝试过使用 git rebase --exec 'git commit --amend --no-edit -S <keyid> 吗? - julian
是的,它给了我这个错误。错误:路径规范“xxxxxxxx”与git已知的任何文件不匹配。 - Hhry
你需要用新的提交替换每个旧的提交:新的哈希ID将不同。@julian的命令应该可以解决这个问题,但请注意它是-S<keyid>而不是有空格的-S <keyid>-S <keyid>会被视为-S,即没有指定key-ID,然后keyid参数会被视为文件名(这会导致路径规范错误)。 - torek
谢谢你的帮助。看起来这个命令只改变了一个提交。有没有像批处理这样的东西? - Hhry
1个回答

4

我知道这是一个老问题,但我遇到了类似的情况,需要签署(重新签署)一堆旧提交记录。 首先确认你想要(重新)签署多少以前的提交记录:

git log --show-signature


假设您想对前五个提交进行签名,可以执行以下操作:
git rebase -i HEAD~5


在编辑器中,您将看到您的提交记录:
...
pick 4dd9ec5 fixed wrong config
pick 89d21f4 minor fix
...

在想要签名(或重新签名)每个提交之后,只需添加此行即可。

exec git commit --amend --no-edit -s

那么它看起来就像:

...
pick 4dd9ec5 fixed wrong config
exec git commit --amend --no-edit -s
pick 89d21f4 minor fix
exec git commit --amend --no-edit -s
...

保存并退出:

注意:确保您在上游存储库中具有强制推送权限(git push -f),因为这很可能需要使用全部力量进行推送。

另请注意:使用此方法,您可以签署除一个之外的所有先前提交。您可能无法对初始提交进行签名。

来源

编辑:源不再可用。因此这就是它的内容。


关于您的最后一条评论:git rebase --root不允许这样吗? - Aria

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接