我想知道如何签署(-s
)以前我在git中做过的提交?
要注销先前的提交,请使用修改选项:
git commit --amend --signoff
编辑:修改只签署最新提交。根据qazxsw poi等人的建议,签署多次提交,qazxsw poi和qazxsw poi。人。应该使用。这对我有用。
首先,配置git以filter-branch
替换令牌interpret-trailers
。这必须只进行一次,并在下一步中需要。
vonc
带有开关sign
的命令Signed-off-by
将为每次提交评估过滤器一次。过滤器可以是任何shell命令,它接收stdin上的提交消息和stdout上的输出。您可以编写自己的过滤器,或使用无能为力的git config trailer.sign.key "Signed-off-by"
。下面是一个使用当前用户和电子邮件签署当前分支的最新两次提交的示例:
git filter-branch
注1)修改提交消息会更改提交ID,这意味着必须使用--msg-filter
或更好的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
将当前目录更改为--force
。使用脚本的相对路径通常不起作用。相反,脚本应该在您的--force-with-lease中或作为绝对路径提供。
尝试使用git filter-branch
重做旧提交:
<repo>/.git-rewrite/t
在那之后,你必须$PATH
。但要小心,提交ID将会改变,其他人将变得不同步。
考虑签名修改提交消息,使用-S
来实现。
git filter-branch -f --commit-filter 'git commit-tree -S "$@"' HEAD
(例如“git push -f
”)
或者,跟随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
警告:这将更改现有提交的SHA1,并且您可能必须强制推送结果,如果您的提交已经被其他人共享,则可能会出现问题。
suggestion添加git interpret-trailers
一个例子:
使用git版本2.20.1,我不得不在
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
中省略“vorburger”,并且这样做:
in the comment
对我来说只是修改标志,实际上没有验证我在github上的提交。
为我工作的解决方案是返回,然后用Signed-off-by
签署每个提交
--trailer 'sign:
此外,如果您检查您的提交是否实际已签名,并且您的电子邮件/名称未被追加,请使用此命令
git filter-branch --msg-filter \
"cat - && echo && git interpret-trailers --trailer 'sign: Michael Vorburger <[email protected]>'" \
HEAD
额外提示:如果您已经在修改提交,可能需要在其中使用您的真实姓名(请参阅使用-S
)。您可能正在使用您的github句柄名称,这是不需要的。只需要正确的电子邮件,在用户名字段中,您应该使用您的全名,github将使用您的github句柄名称正确跟踪它。因此,要更正您的用户名并签署上次提交使用:
git commit --amend -S
并在以后设置用户名的全名
git show HEAD --show-signature
我有一个类似的问题。在这里,感谢来自Gentoo Linux的Robin Johnson,这是一个为我以前所有未提交的提交添加签名的技巧:
git log