如何解决重新签名先前的提交,而无需更改提交哈希和保留标签
我在GitHub上有几个存储库,我一直在使用GnuPG进行签名提交。我丢失了用于GPG签名的私钥和公钥,因此我创建了一个新的密钥对,但是犯了一个错误,即覆盖了我以前的公钥,而不是在GitHub上添加了新的公钥。
我尝试在Git Bash中运行以下命令,但这改变了提交哈希,这破坏了我的标签。
git filter-branch --commit-filter '
if [ "$GIT_COMMITTER_EMAIL" = "MY EMAIL" ];
then
GIT_COMMITTER_NAME="MY NAME";
GIT_AUTHOR_NAME="MY NAME";
GIT_COMMITTER_EMAIL="MY EMAIL";
GIT_AUTHOR_EMAIL="MY EMAIL";
git commit-tree -S "$@";
else
git commit-tree "$@";
fi' HEAD
git push --force
git for-each-ref --format="%(refname)" refs/original/ | xargs -n 1 git update-ref -d
我最终从reflog进行了重置以撤消这些更改。
我主要是要确保这不是在多个存储库和多个提交/标签上进行的手动工作。因此,我对可以解决以前提交的签名同时仍链接到标签的任何解决方案感到满意。
解决方法
在不修改提交哈希的情况下,无法以任何方式修改提交,包括更改签名。对整个提交对象(包括签名)进行哈希处理以计算对象ID。
这意味着您既需要重写标记(使用--tag-name-filter
)也要提交,或者只接受旧的提交具有旧的签名密钥,而新的提交将具有新的签名密钥。就我个人而言,我只会做后者。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。