我想知道如何签署(-s
)以前我在git中做过的提交?
答案 0 :(得分:71)
要签署先前的提交,请使用修改选项:
git commit --amend --signoff
答案 1 :(得分:20)
尝试使用-S
来重做旧提交:
git filter-branch -f --commit-filter 'git commit-tree -S "$@"' HEAD
之后,您必须git push -f
。但是要小心,提交ID会改变,其他人会变得不同步。
答案 2 :(得分:10)
考虑签名修改提交消息,使用git filter-branch
来实现这一点。
git filter-branch --msg-filter \
"cat - && echo && echo 'Signed-off-by: Dan McGee <email@example.com>'" \
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@example.com>'" \
HEAD
警告:这将更改现有提交的SHA1,您可能必须强制推送结果,如果您的提交已经被其他人共享,则可能会出现问题。
使用git版本2.20.1,我不得不在
Signed-off-by
中省略“--trailer 'sign:
”,并按照以下方式执行操作:
git filter-branch --msg-filter \
"cat - && echo && git interpret-trailers --trailer 'sign: Michael Vorburger <vorburger@redhat.com>'" \
HEAD
答案 3 :(得分:6)
对我来说只是在修改signof,实际上并没有在github上验证我的提交。
为我工作的解决方案是返回,然后使用git commit --amend -S
git show HEAD --show-signature
此外,如果您检查您的提交是否已实际签名,并且您的电子邮件/名称未被追加,请使用此命令
git log
额外提示:如果您已经在修改提交内容,则可能需要使用其真实姓名(请参阅使用git commit --amend --author="FULL NAME <email>" -S
)。您可能正在使用您的github句柄名称,这是不需要的。只需要正确的电子邮件,在用户名字段中,您应该使用您的全名,github将使用您的github句柄名称正确跟踪它。因此,要更正您的用户名并签署上次提交,请使用:
git config --global user.name "FULL NAME"
并且还将通过
设置用户名的全名var count = (($btn.data(".click_count") || 0)%3) + 1;
答案 4 :(得分:5)
我有类似的问题。在这里,感谢来自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 :(得分:5)
带有-S
标志的交互式变基将完成这项工作。
假设您需要签署最近的 n 个提交 (确保签出最新的这些 n 提交)。
运行:
$ git rebase -S -i HEAD~n
# The `-S` flag is important.
# It tells Git to sign the following commits.
这给出了最近n
次提交的列表。
现在,将要签名的所有提交的pick
更改为 edit
前缀。
完成后,关闭编辑器。一个新的编辑器将打开,其中包含有关提交的所有内容。
由于在提交中无需进行任何更改,因此请保存文件并退出编辑器。您还可以在其上更改提交消息。
对其他提交重复此操作。
要推送最新历史记录,请git push remote branch -f
。
只有一个陷阱-它可以重写您的提交。
如果您签署了一个为期4个月的提交,它可能会覆盖其日期并使它看起来像今天创建的。因此,当您要保留提交历史记录时,不建议使用。
答案 6 :(得分:4)
如果仍然有人在寻找一种更好的自动签署提交的方法。
尝试一下:
git rebase --exec 'git commit --amend --no-edit -n -S' -i commit-hash
这将使所有内容恢复基础,直到提交哈希(X次提交)
然后git push -f
需要将历史更改推回远程
答案 7 :(得分:3)
答案 8 :(得分:1)
签署最后 X 次提交的快速解决方案。
git rebase --signoff @~X
例如,签收最近 10 次提交
git rebase --signoff @~10
我发现这对我的情况来说是一个简单的解决方案。来源:https://pmhahn.github.io/git-signoff/
答案 9 :(得分:0)
我发现这种方法对我在提交历史记录中签署特定提交有用。鉴于要签名的提交哈希是已知的:
# Select the commit-hash to sign-off
$ git rebase -i <commit-hash>^
# Change the first commit’s action to ‘e’ or ‘edit’, then save and close the editor, then…
# Sign the specific commit.
$ git commit --amend --no-edit --signoff
# Continue the rebase
$ git rebase --continue