Git签署以前的提交?

时间:2012-10-24 05:11:05

标签: git sign git-sign

我想知道如何签署(-s)以前我在git中做过的提交?

10 个答案:

答案 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. 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@example.com>'" \
    HEAD

警告:这将更改现有提交的SHA1,您可能必须强制推送结果,如果您的提交已经被其他人共享,则可能会出现问题。

vorburger添加in the comment示例:

  

使用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)

这几天(从Git 2.13开始),您通常可以做类似的事情

git rebase --signoff HEAD~2

Signed-off-by页脚添加到最后2次提交中(在此示例中)。

答案 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