git rebase
解决方案
我制定了以下解决方案。它看起来并不完美,但它确实发挥了作用,在我的健全性测试中,它不会失败,例如,对于只有一个双引号的提交消息:
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=2)
,您想附加到
Reviewed-by
-
git commit --amend -mâ¦
修正提交,并将其消息替换为下面的消息。
-
git log --format=%B -n1
-
echo -ne \\nReviewed-by: User \<mail\>.
这个有点棘手。最明显的是它增加了
审核人
echo
这里添加新行,然后添加文本。
您可以通过从命令历史记录中获取它来使用它,也可以将它包装到bash/zsh函数中,例如:
function git_rb() {
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
git filter-branch
解决方案
一个有限的解决方案
this article
. 结果,你可以用
git筛选器分支
做同样的事。它会打印出一个警告,尽管它会破坏历史,并建议使用
git filter-repo
相反。但这是一个独立于git的项目,我没有测试它。从阅读“gotchas”我得到了一个印象,那就是修改提交消息
很好。但是我发现这个方法有一个问题:你不能使用
HEAD~n
符号,它会随着
You must specify a ref to rewrite
错误。相反,你必须使用这样的符号
master..HEAD
git filter-branch -f --msg-filter 'cat && echo -e "\nReviewed-by: User<Holy Moly>"' master..HEAD