显然不是最受欢迎的情况,但我有一些提交我想要附加一行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问过,但没有用。
欢迎任何其他建议。
我编写了以下解决方案。它看起来并不完美,但能完成它的工作,而且在我的理智测试中它不会失败,例如:使用具有单引号的提交消息:
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" "[email protected]" 5