我有一个脚本,可以在向评论添加更多信息的同时挑选提交。今天我运行
git cherry-pick
,然后运行 git commit --amend
来修改提交消息。
我可以看到有
-e
标志,但它似乎是交互式的。有没有办法以非交互方式运行 git cherry-pick
并显示消息?
我决定使用
git cherry-pick
标志调用 --no-commit
。然后我明确提交新消息。目前我没有看到更好的解决方案。
我在这里找到了另一个解决方案,灵感来自于这篇文章的高级想法是:
prepare-commit-msg
git hook我的具体目标是更新精选消息,使其说出诸如
(cherry picked from commit abcd by roryabraham)
之类的内容,而不仅仅是 (cherry picked from commit abcd)
。我也无法调整提交参与者而不是消息,原因超出了此处解释的范围。
我的解决方案如下所示:
# Create the git hook
echo '#!/bin/bash' >> .git/hooks/prepare-commit-msg
# shellcheck disable=SC2016
echo 'sed -i "" -E "s/(\(cherry picked from commit .*[^)])/\1 by roryabraham/" $1' >> .git/hooks/prepare-commit-msg
# Make the hook executable
chmod u+x .git/hooks/prepare-commit-msg
# Execute the cherry-pick
git cherry-pick -x --mainline 1 --strategy=recursive -Xtheirs abcd
# Cleanup the hook
rm .git/hooks/prepare-commit-msg
解释
sed
命令:
(cherry picked by commit abcd
并将结果包装在捕获组中\1
) 并附加 by roryabraham
$1
–prepare-commit-msg 挂钩的第一个参数是包含提交消息的文本文件的文件路径