显然不是最流行的情况,但是我有许多提交要附加Reviewed-by: user<mail>
行的消息。
到目前为止,我只发现此命令对我来说失败了,Invalid line: 10: Reviewed-by: User <mail>
GIT_EDITOR='git interpret-trailers --trailer "Reviewed-by: User <mail>" --in-place' git rebase -i HEAD~8
我还问过IRC,但无济于事。
欢迎其他任何建议。
答案 0 :(得分:2)
我提出了以下解决方案。它看起来并不完美,但是可以正常工作,在我的理智测试中,它不会失败,例如带有单引号的提交消息:
git rebase HEAD~2 -x 'git commit --amend -m"$(git log --format=%B -n1)$(echo -ne \\nReviewed-by: User \<mail\>.)"'
让我们分解一下命令:
git rebase HEAD~2 -x …
对n个提交(其中n = 2)作基础,您要向其附加Reviewed-by
,并且每次提交都会停止并执行shell命令随后。git commit --amend -m…
修改提交,并将其消息替换为随后的消息。git log --format=%B -n1
打印“当前”提交的消息。echo -ne \\nReviewed-by: User \<mail\>.
,这有点棘手。显而易见的部分是它添加了Reviewed-by
文本。不太明显的是内联命令执行会删除结尾的空格,即前一个命令的输出没有换行符。因此,echo
在此处添加了换行符,然后添加了文本。您可以通过从命令历史中获取它来直接使用它,也可以将其包装到bash / zsh函数中,例如:
# adds reviwed-by to n commits
function git_rb() {
# export arguments, otherwise they're not visible to inline shell executions
export who=$1
export mail=$2
export n=$3
git rebase HEAD~$n -x 'git commit --amend -m"$(git log --format=%B -n1)$(echo -e \\nReviewed-by: ${who} \<${mail}\>.)"'
}
然后将其用作
$ git_rb "Holy Moly" "Holy@example.com" 5