git追加“ Reviewed-by”提交

时间:2018-10-29 14:16:42

标签: git rebase

显然不是最流行的情况,但是我有许多提交要附加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,但无济于事。

欢迎其他任何建议。

1 个答案:

答案 0 :(得分:2)

我提出了以下解决方案。它看起来并不完美,但是可以正常工作,在我的理智测试中,它不会失败,例如带有单引号的提交消息:

git rebase HEAD~2 -x 'git commit --amend -m"$(git log --format=%B -n1)$(echo -ne \\nReviewed-by: User \<mail\>.)"'

让我们分解一下命令:

  1. git rebase HEAD~2 -x …对n个提交(其中n = 2)作基础,您要向其附加Reviewed-by,并且每次提交都会停止并执行shell命令随后。
  2. git commit --amend -m…修改提交,并将其消息替换为随后的消息。
  3. git log --format=%B -n1打印“当前”提交的消息。
  4. 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