我想要给一个我完成的分支上的所有提交签名,并将这些提交发送到上游项目(如通过GitHub上的拉取请求)。
我发现一种建议的方法是使用
git rebase -i [base-commit]
# Set all commits to "edit"
git commit --amend --signoff # do this for all commits
我该如何自动完成这个操作,只使用一个非交互式的命令?
我想要给一个我完成的分支上的所有提交签名,并将这些提交发送到上游项目(如通过GitHub上的拉取请求)。
我发现一种建议的方法是使用
git rebase -i [base-commit]
# Set all commits to "edit"
git commit --amend --signoff # do this for all commits
我该如何自动完成这个操作,只使用一个非交互式的命令?
git commit --amend --signoff
":参见提交9f79524(2017年4月18日)和提交0fb3c4f、提交b7cc705,作者是Giuseppe Bilotta (Oblomov
)。(由Junio C Hamano -- gitster
--合并于提交768c7cb, 2017年4月26日)
rebase
: 将--[no-]signoff
选项传递给git am
这使得在提交之前容易为整个补丁集签名。
git rebase
手册页现在包括:
--signoff:
该标志传递给 'git am
' 以签署所有经过变基的提交。--interactive
选项不兼容。git rebase
" 已经学会尊重使用除 "am
" 之外的后端时的 "--signoff
" 选项 (但不支持 "--preserve-merges
")。
rebase
: 扩展 --signoff
支持--interactive
和 --merge
时使用 --signoff
。git rebase --exec "make check" --signoff
' 来为发布准备一个补丁系列,比使用另一个 --exec 命令更方便。--onto
的情况下使用 --root
来与 --signoff
一起工作 (--onto
已经支持 --root
)。rebase -p
: 如果给出 --signoff
,则出错
rebase --preserve-merges
不支持 --signoff
,因此报错而不是静默忽略它,以便用户知道提交不会被签署。事实证明,git别名可以很好地完成这项任务。将以下内容添加到您的~/.gitconfig
文件中:
[alias]
# Usage: git signoff-rebase [base-commit]
signoff-rebase = "!GIT_SEQUENCE_EDITOR='sed -i -re s/^pick/e/' sh -c 'git rebase -i $1 && while git rebase --continue; do git commit --amend --signoff --no-edit; done' -"
这里还有一个Gist,与此相关。
您可以像使用git rebase
一样使用它;使用sed
自动将pick
翻转为edit
,并且--no-edit
确保不会为每个提交打开编辑器。
git rebase --signoff
命令。请参见下面的答案。 - VonC