私はサインする方法を疑問に思っていました(-s
)gitで過去に行った以前のコミットをオフにしますか?
前のコミットをサインオフするには、修正オプションを使用します。
git commit --amend --signoff
編集:修正は、最新のコミットのみをサインオフします。複数のコミットをサインオフするには、 vonc etで提案されているfilter-branch
およびinterpret-trailers
を使用します。 al。使用すべきです。ここに私のために働いたものがあります。
まず、トークンsign
をSigned-off-by
で置き換えるようにgitを構成します。これは一度だけ行う必要があり、次のステップで必要です。
git config trailer.sign.key "Signed-off-by"
スイッチgit filter-branch
を指定したコマンド--msg-filter
は、コミットごとに1回フィルターを評価します。フィルターは、stdinでコミットメッセージを受信し、stdoutで出力する任意のシェルコマンドにすることができます。独自のフィルターを作成するか、git interpret-trailers
を使用できます。現在のユーザーと電子メールを使用して、現在のブランチの最新の2つのコミットをサインオフする例を次に示します。
export SIGNOFF="sign: $(git config --get user.name) <$(git config --get user.email)>"
git filter-branch -f --msg-filter \
"git interpret-trailers --trailer \"$SIGNOFF\"" \
HEAD~2..HEAD
注1)コミットメッセージを変更すると、コミットIDが変更されます。つまり、既に公開されているブランチのプッシュオーバーは、--force
またはそれ以上 -force-with-lease で強制する必要があります。
注2)カスタムスクリプトを作成する場合は、git filter-branch
が現在のディレクトリを<repo>/.git-rewrite/t
に変更することに注意してください。通常、スクリプトへの相対パスを使用しても機能しません。代わりに、スクリプトは$PATH
にあるか、絶対パスとして提供される必要があります。
-S
で古いコミットをやり直すには、これを試してください:
git filter-branch -f --commit-filter 'git commit-tree -S "$@"' HEAD
その後、git Push -f
する必要があります。しかし、注意してください、コミットIDが変更され、他の人が同期しなくなります。
サインオフを考慮してコミットメッセージを変更し、 git filter-branch
それを実現します。
git filter-branch --msg-filter \
"cat - && echo && echo 'Signed-off-by: Dan McGee <[email protected]>'" \
HEAD
(「 git filter-branch
magic ")
または、 Curt J. Sampson の suggestion を使用して、 git interpret-trailers
:
git config trailer.sign.key "Signed-off-by"
git filter-branch --msg-filter \
"cat - && echo && git interpret-trailers --trailer 'sign: 'Signed-off-by: Dan McGee <[email protected]>'" \
HEAD
警告:これにより、既存のコミットのSHA1が変更され、結果を強制的にプッシュする必要がある場合があります。これは、コミットが既に共有されている場合に問題になる可能性があります他の人によって。
Gitバージョン2.20.1を使用して、「
Signed-off-by
"in--trailer 'sign:
、次のようにします。
git filter-branch --msg-filter \
"cat - && echo && git interpret-trailers --trailer 'sign: Michael Vorburger <[email protected]>'" \
HEAD
サインオフを修正するだけで、実際にgithubでコミットを検証しませんでした。
私のために働いている解決策は戻って、-S
で各コミットに署名することです
git commit --amend -S
また、コミットが実際に署名されているかどうかを確認し、メール/名前が単に追加されていない場合は、このコマンドを使用します
git show HEAD --show-signature
追加のヒント:すでにコミットを修正している場合は、実際の名前をコミットに含めることができます(git log
の使用を参照)。 githubのハンドル名を使用している可能性がありますが、これは必要ありません。正しいメールのみが必要であり、ユーザー名のフィールドではフルネームを使用する必要があり、githubはそれをgithubのハンドル名で正しく追跡します。したがって、ユーザー名を修正し、最後のコミットの使用に署名するには:
git commit --amend --author="FULL NAME <email>" -S
また、将来的にはユーザー名のフルネームを設定します
git config --global user.name "FULL NAME"
同様の問題がありました。ここで、Gentoo LinuxのRobin Johnsonのおかげで、以前のすべての未プッシュのコミットに署名を追加することができます。
$ git pull && git rebase --gpg-sign --force-rebase Origin/master && git Push --signed
Already up-to-date.
Current branch master is up to date, rebase forced.
First, rewinding head to replay your work on top of it...
Applying: sci-biology/KING: new package
Applying: dev-lang/yaggo: version bump, fix install procedure
Applying: sci-libs/htslib: version bump
Applying: sci-biology/bcftools: version bump
Applying: sci-biology/samtools: version bump
Applying: sci-biology/libBigWig: new release with io.h renamed to bigWigIO.h
Applying: sci-biology/MaSuRCA: add more URLs to HOMEPAGE
Applying: sci-biology/SPAdes: update comments on bundled dev-libs/boost
Applying: sci-biology/khmer: added a comment how to proceed with src_compile()
Applying: sci-biology/picard: version bump
Applying: sci-biology/ruffus: pint EGIT_REPO_URI to the archive URL of code.google.com
Applying: sci-biology/vcftools: the 0.1.15_pre release was just renamed to 0.1.15 by upstream
Applying: sci-biology/nanopolish: new package
Applying: sci-biology/libBigWig: version bump
Counting objects: 75, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (75/75), done.
Writing objects: 100% (75/75), 14.51 KiB | 0 bytes/s, done.
Total 75 (delta 55), reused 0 (delta 0)
remote: To github.com:gentoo/sci.git
remote: 29c5e3f5d..b37457700 master -> master
To git+ssh://git.gentoo.org/proj/sci.git
29c5e3f5d..b37457700 master -> master
$