web-dev-qa-db-ja.com

Gitは以前のコミットを終了しますか?

私はサインする方法を疑問に思っていました(-s)gitで過去に行った以前のコミットをオフにしますか?

55
camelCaseD

前のコミットをサインオフするには、修正オプションを使用します。

git commit --amend --signoff

編集:修正は、最新のコミットのみをサインオフします。複数のコミットをサインオフするには、 vonc etで提案されているfilter-branchおよびinterpret-trailersを使用します。 al。使用すべきです。ここに私のために働いたものがあります。

まず、トークンsignSigned-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にあるか、絶対パスとして提供される必要があります。

77
fgiraldeau

-Sで古いコミットをやり直すには、これを試してください:

git filter-branch -f --commit-filter 'git commit-tree -S "$@"' HEAD

その後、git Push -fする必要があります。しかし、注意してください、コミットIDが変更され、他の人が同期しなくなります。

23

サインオフを考慮してコミットメッセージを変更し、 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. Sampsonsuggestion を使用して、 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が変更され、結果を強制的にプッシュする必要がある場合があります。これは、コミットが既に共有されている場合に問題になる可能性があります他の人によって。

vorburger 追加 コメント内 例:

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
10
VonC

サインオフを修正するだけで、実際に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"
6
Varun Garg

同様の問題がありました。ここで、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
$
5
Martin