【问题标题】:Re-sign previous commits without changing commit hash and preserving tags在不更改提交哈希和保留标签的情况下重新签署以前的提交
【发布时间】:2020-10-18 01:34:01
【问题描述】:

我在 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 中重置以撤消这些更改。

我主要想确保这不是针对多个存储库和多个提交/标签的手动工作。因此,我对任何可以修复先前提交的签名同时仍链接到标签的解决方案感到满意。

【问题讨论】:

    标签: git github gnupg


    【解决方案1】:

    在不修改提交哈希的情况下,无法以任何方式修改提交,包括更改签名。对整个提交对象(包括签名)进行哈希计算以计算对象 ID。

    这意味着您要么需要重写标签(使用--tag-name-filter)以及提交,要么只接受旧提交具有旧签名密钥而新提交将具有新签名密钥。就个人而言,我只会做后者。

    【讨论】:

    • 感谢您的解释,不过,我仍然想修复以前的提交,因为 GitHub 使用旧公钥在提交中添加了“未验证”标记,这不是很理想。
    • 你不能把旧密钥也添加回 GitHub 吗?
    • 我丢失了两个密钥,我将编辑我的问题以更具体
    猜你喜欢
    • 2011-07-09
    • 2013-04-28
    • 2021-02-15
    • 2012-10-14
    • 1970-01-01
    • 2017-09-09
    • 2012-05-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多