如何使用git interactive rebase签署一系列提交

nh2*_*nh2 11 git git-rebase git-commit

我想我已经完成并想要发送到上游项目的分支上签署所有提交(例如,通过GitHub上的pull请求).

我发现的推荐方法是使用

git rebase -i [base-commit]
# Set all commits to "edit"
git commit --amend --signoff  # do this for all commits
Run Code Online (Sandbox Code Playgroud)

如何在一个非交互式命令中自动执行此操作?

Von*_*onC 6

在Git 2.13(2017年第二季度)中,不再git commit --amend --signoff需要“ ”:
请参阅Giuseppe Bilotta(提交9f79524(2017年4月18日),提交0fb3c4fb7cc705(2017年4月15日(通过合并JUNIOÇ滨野- -提交768c7cb 4月26日2017)Oblomov
gitster

rebase:将--[no-]signoff选项传递给git am

这样可以轻松在提交之前注销整个补丁集。

git rebase手册页现在包括:

--signoff:
Run Code Online (Sandbox Code Playgroud)

此标志传递给' git am',以注销所有重新提交的提交。
与该--interactive选项不兼容。


更新(一年后,2018年5月)“ git rebase”已经学会了--signoff使用“ am”(但不是“ --preserve-merges”)后端时使用“ ”选项。

rebase:扩展--signoff支持

允许--signoff--interactive和一起使用--merge
在交互模式下,仅标记为被选择,编辑或改写的提交将被注销。

此补丁的主要动机是允许一个人运行' git rebase --exec "make check" --signoff',这在准备发布的补丁系列时非常有用,并且比使用另一个--exec命令进行签名更方便。

这种变化也使--root--onto与工作--signoff以及(--root--onto已经支持)。

它也更强大:

rebase -p:如果--signoff给出错误

rebase --preserve-merges不支持--signoff这样的错误输出,而不仅仅是默默地忽略它,以便用户知道提交不会被注销。


nh2*_*nh2 5

它转变为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' -"
Run Code Online (Sandbox Code Playgroud)

这里也是一个要点.

你就像使用它一样git rebase; 在picks的自动翻转到edit使用S sed--no-edit确保不要打开编辑器为每一个承诺.