gitでGPG署名付きコミットを忘れた時
背景
私は可能な限り開発状況においてコミットはGPG署名付きにて行っていますが、自分の新しいPC環境やリモートサーバーで直接開発を行いコミットをする際に、GPGの設定をするのを忘れていたりすると開発の手が止まってしまい、非常に嫌な思いをします。
そこで今回はそんな時に、後からでも署名を追加できるコミットの編集方法を紹介します。
TL;DR
git rebase -i {ターゲットの一つ手前のコミットID}
- エディタが立ち上がり、1で指定したコミットIDまでの履歴が一覧として立ち上がるので、GPG署名を追加したいターゲットのコミット(もしくは複数)のコマンドを
pick
からedit
へと変更し、保存する git commit --amend --no-edit -S
git rebase --continue
署名の確認
まず最初に、署名が確認されているのかどうかの確認をしてみましょう。
コマンドはgit log --show-signature
で確認が可能です。
kazuaki@yeezy:~/fun/zenn.dev$ git log --show-signature
commit 63b4a857462ee7f29eb81fc2118a5e9acd831138 (HEAD -> master)
Author: Kazuaki Ishiguro <kazuakiishiguro@protonmail.com>
Date: Sun Oct 17 21:01:49 2021 +0900
added zenn-cli
commit f41e5df5c31db4b3df7561447242038c0b677ea8 (origin/master)
gpg: Signature made Mon 06 Sep 2021 10:19:01 AM JST
gpg: using EDDSA key ...BECD98A8A99831
gpg: Good signature from "Kazuaki Ishiguro <kazuakiishiguro@protonmail.com>" [ultimate]
Author: Kazuaki Ishiguro <kazuakiishiguro@protonmail.com>
Date: Mon Sep 6 10:19:01 2021 +0900
Initial setup
上記のログから、コミットID63b4a857462ee7f29eb81fc2118a5e9acd831138
がAuthorとDate、そしてコミットメッセージしか記載されていないのに対して、コミットIDf41e5df5c31db4b3df7561447242038c0b677ea8
はgpgでの署名情報が記載されており、直近のコミットに署名がされていない事が確認できました。
コミットの編集
では早速コミットを編集してみましょう。
ターゲットの指定
使うコマンドはgit rebase
になります。
git rebase
でのコミットの編集はからターゲットとなるコミットIDの一つ前のコミットを指定する必要があります。
今回の例ですとf41e5df5c31db4b3df7561447242038c0b677ea8
を指定してあげる必要があります。
kazuaki@yeezy:~/fun/zenn.dev$ git rebase -i f41e5df5c31db4b3df7561447242038c0b677ea8
# 以下エディタ内での表示
pick 63b4a85 added zenn-cli
# Rebase f41e5df..63b4a85 onto f41e5df (1 command)
#
# Commands:
......
rebase
の挙動についてより詳しく知りたいという人は公式のドキュメントを参照する事をお勧めします。
pick
-> edit
)し、保存する
編集したいコミットIDの左にあるコマンドを変更(上記の例ですと、以下の様に変更します。
# 以下エディタ内での表示
edit 63b4a85 added zenn-cli
# Rebase f41e5df..63b4a85 onto f41e5df (1 command)
#
# Commands:
上記の状態で保存するとエディタが終了し、ターミナル画面へと戻ってきます。
戻ってくると以下の様な画面が表示されているかと思います。
kazuaki@yeezy:~/fun/zenn.dev$ git rebase -i f41e5df5c31db4b3df7561447242038c0b677ea8
Stopped at 63b4a85... added zenn-cli
You can amend the commit now, with
git commit --amend
Once you are satisfied with your changes, run
git rebase --continue
署名を追加
ステップ2ではターゲットのコミットが編集が可能な状態となりました。
親切な事にも必要なコマンドが記載されていますので、それに沿って残りのコマンドを叩けば終了です。
とは言え、今回は署名を追加するのみの編集をする事が目的なので、--no-edit
と-S
のオプションの指定が必要となります。
コマンドの詳細は以下です。
-
--amend
前のコミットを修正。 -
--no-edit
既存のメッセージを使用。 -
-S
GPG署名を指定。
こちらのコマンドを叩くと以下のようなメッセージが表示されます。
kazuaki@yeezy:~/fun/zenn.dev$ git commit --amend --no-edit -S
[detached HEAD 2fb6f5e] added zenn-cli
Date: Sun Oct 17 21:01:49 2021 +0900
2 files changed, 909 insertions(+), 896 deletions(-)
rewrite yarn.lock (96%)
編集を終了
HEAD
をアップデートする必要があるので、最後にrebaseを続行するオプション--continue
を指定して編集を終了します。
kazuaki@yeezy:~/fun/zenn.dev$ git rebase --continue
Successfully rebased and updated refs/heads/master.
署名の再確認
それでは問題なく編集ができてるのか確認をしてみましょう。
最初と同様にgit log --show-signature
を叩きます。
kazuaki@yeezy:~/fun/zenn.dev$ git log --show-signature
commit 2fb6f5e4ef43928ae465bf904efcfd3d98a0d45e (HEAD -> master)
gpg: Signature made Sun 17 Oct 2021 09:33:28 PM JST
gpg: using EDDSA key ...BECD98A8A99831
gpg: Good signature from "Kazuaki Ishiguro <kazuakiishiguro@protonmail.com>" [ultimate]
Author: Kazuaki Ishiguro <kazuakiishiguro@protonmail.com>
Date: Sun Oct 17 21:01:49 2021 +0900
added zenn-cli
commit f41e5df5c31db4b3df7561447242038c0b677ea8 (origin/master)
gpg: Signature made Mon 06 Sep 2021 10:19:01 AM JST
gpg: using EDDSA key ...BECD98A8A99831
gpg: Good signature from "Kazuaki Ishiguro <kazuakiishiguro@protonmail.com>" [ultimate]
Author: Kazuaki Ishiguro <kazuakiishiguro@protonmail.com>
Date: Mon Sep 6 10:19:01 2021 +0900
Initial setup
正常にコミットを編集してGPG署名を追加する事ができました。
同様の問題に悩んでいた人の為になれば幸いです。
Discussion