git将“已审核”附加到提交中

问题描述 投票:2回答:1

显然不是最受欢迎的情况,但我有一些提交我想要附加一行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
1个回答
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" "[email protected]" 5
© www.soinside.com 2019 - 2024. All rights reserved.