如何以非交互方式挑选评论?

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

我有一个脚本,可以在向评论添加更多信息的同时挑选提交。今天我运行

git cherry-pick
,然后运行
git commit --amend
来修改提交消息。

我可以看到有

-e
标志,但它似乎是交互式的。有没有办法以非交互方式运行
git cherry-pick
并显示消息?

git cherry-pick
2个回答
4
投票

我决定使用

git cherry-pick
标志调用
--no-commit
。然后我明确提交新消息。目前我没有看到更好的解决方案。


0
投票

我在这里找到了另一个解决方案,灵感来自于这篇文章的高级想法是:

  1. 创建一个
    prepare-commit-msg
    git hook
  2. 在此挂钩中,执行您想要编辑消息的任何操作。我使用了带有 sed 的 bash 脚本,但您可以使用 python 脚本或任何其他可执行文件。
  3. (可选)如果您不希望每次提交都发生这种情况,请在完成后删除 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
命令:

  • -i 标志告诉 sed “内联编辑文件”
  • -E 标志表示“使用扩展正则表达式”
  • 正则表达式查找
    (cherry picked by commit abcd
    并将结果包装在捕获组中
  • sed 的后半部分使用捕获组 (
    \1
    ) 并附加
    by roryabraham
  • $1
    –prepare-commit-msg 挂钩的第一个参数是包含提交消息的文本文件的文件路径
© www.soinside.com 2019 - 2024. All rights reserved.