33

Interactive でいくつかのコミットを押しつぶしたい場合rebase:

git rebase -i HEAD~3

その後:

pick cbd03e3 Final commit (signed)
s f522f5d bla-bla-bla (signed)
s 09a7b7c bla-bla (signed)

# Rebase c2e142e..09a7b7c onto c2e142e
...

これらのコミットはすべて同じ署名を持っていますが、最後のコミットには gpg 署名がありません。対話型リベース スカッシュ後にコミット gpg 署名を保持することは可能ですか?

4

4 に答える 4

64

Cupcake が述べたように、圧縮されていないコミットから古い署名を保持することはできませんが、次のようにリベースすると、新しい圧縮されたコミットに署名できます。

git rebase --interactive --gpg-sign=myemail@example.com HEAD~4

引数として追加する--gpg-sign=myemail@example.comと、最終的に押しつぶされたコミットに署名します。

于 2015-03-25T18:18:15.103 に答える
13

あなたができることは意味がありません。gpg 署名の要点は、コードが改ざんされていないことを確認することです。履歴を変更した後も署名を保持できれば、目的全体が無効になります。

現在、gpg で Git コードに署名していないため、正確な詳細はわかりませんが、おそらくツリーの最終コミット オブジェクトをハッシュしていると思います。例のようにリベースするFinal commitと、異なるsha1 IDを持つため、リベース前と同じオブジェクトではないため、同じgpg署名を持つことはおそらく不可能であり、私が言ったように意味がありません.

于 2013-09-18T14:42:08.957 に答える
4

リベースされたコミットで署名を保持しないという事実を補強するために、git 2.9.x+ (2016 年第 3 四半期) はgit pull --rebase署名をチェックしないことを明確に述べます (リベース部分がそれらを失うため)

Alexander Hirsch (`` ) によるコミット c57e501 (2016 年 5 月 20 日)を参照してください。( 2016 年 6 月 20 日コミット 73bc4b4Junio C Hamanoによってマージされました)
gitster

pull: で警告--verify-signaturesする--rebase

git-pull--verify-signatures実行時にオプションを黙って無視するため--rebase、リベース操作で有効な GPG 署名がチェックされるとユーザーに思い込ませる可能性があります。

の実装--verify-signaturesgit rebase話題になりましたが、有効なワークフローに対する疑問が生じました。通常、他のブランチを自分のブランチにマージするので、その側に有効な GPG 署名があることに関心があるかもしれません。

一方、リベースは、結果を元に戻すために、他の人の作業の上にブランチを再構築することであり、コミットに受け入れられる署名がないことがわかったとしても、彼らの作業を拒否するには遅すぎます

--verify-signatures" " の間はオプションが無視されることをユーザーに警告しましょうpull --rebaseユーザーは、自分のコミットに受け入れられる署名がない場合にどうなるか不思議に思いません

于 2016-06-21T00:13:42.117 に答える