GPG可以签署旧提交吗?


93

Git现在可以用来签署提交git commit -S,这很棒,但是有时我忘记了的标志commit,有时我将适用于的补丁邮寄给自己am,而该命令没有用于签署的标志。

有没有一种方法可以将签名添加到已记录的提交中?


2
根据记录,你可以告诉混帐总是通过配置签名提交:git config commit.gpgsign true
nicooga

@nicooga希望您的评论更多,因此我早些注意到了。我不得不提出至少六个问题,设置该标志将节省我很多时间。
Michael Ziluck

Answers:


78
  1. 进入交互式变基模式。
  2. 在您要签名的每个提交之后添加以下行

    exec git commit --amend --no-edit -S

在选择每个提交后,它将运行此命令。

更新:

更简单的方法是:

git rebase --exec 'git commit --amend --no-edit -n -S' -i development

这将使所有内容重新部署,直到开发(或任何哈希)为止,并且您不必在每次提交后都复制粘贴。


这正是我所需要的,这将是一个非常繁琐的情况,谢谢!
msouth

2
哦,我希望我能早点找到它。我读了很多东西,甚至是从GitHub本身,都说你不能辞职。这证明是完全错误的!我本可以保存成百上千的提交,而现在已经压缩了。哦,很好。谢谢分享!我为此做了一个别名。resign = "!re() { git rebase --exec 'git commit --amend --no-edit -n -S' -i $1; }; re"成为git resign HASH
BarryMode '17

2
这应该是常识!您为人类做了出色的服务(绝不差强人意!)!
hopeseekr

3
完全没有理由重新设置基础。快跑git commit --amend --no-edit -n -S
Quolonel提问'18

9
这不会更改历史记录git push --force吗?
史蒂夫

33

对提交进行签名会更改其内容,因此取决于提交的最新提交会更改其哈希值。

如果您只想签署最近的提交,git commit -S --amend则可以使用。


13

我使用git rebase -i --root(请参阅重写历史记录)并更改pickedit

然后,我git commit -S --amend --no-edit && git rebase --continue 在Windows上使用每个提交。

这是每个提交的手动签名。希望我们能找到更好的解决方案。


我的主目录为git repo(用于dotfiles)。一些程序在重新设置基础时以交互方式获取更改,很有趣地看到正在实时回放的历史记录。它足够慢,因为签名很慢
Avindra Goolcharan

2

我也偶然发现了相同的问题,这是我的解决方案:

git rebase -i --root --exec 'git commit --amend --no-edit --no-verify -S'

这将从第一个初始提交中签署我的所有提交,并绕过我使用husky设置的提交钩子无需更改pickedit


1

如果您只想过滤特定的提交并仅对其签名,则可以使用filter-branch

git filter-branch --commit-filter 'if [ "$GIT_COMMITTER_EMAIL" = "user@domain.com" ];
  then git commit-tree -S "$@";
  else git commit-tree "$@";
  fi' HEAD

如果出于某种原因您只想签署自己的提交,这将很有用。


0

如果您需要对所有提交进行GPG签名,除非在当前分支上执行特定的提交,否则可以使用以下命令:

git filter-branch --commit-filter 'git commit-tree -S "$@";' <COMMIT>..HEAD

<COMMIT>提交ID 在哪里(例如abc123e5)。

这样做的好处是不会干扰提交元数据(包括提交日期)。

如果您还希望停止在每次提交时提示您输入GPG密码,请参见以下答案:https : //askubuntu.com/a/805550

注意:从切换gpggpg2GIT签名将需要您在GPG 2中重新导入私钥。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.