在`git-commit`期间向`COMMIT_EDITMSG`注入额外提示

ff29svar  于 2023-08-01  发布在  Git
关注(0)|答案(1)|浏览(129)

问题

当我在不带-m的情况下运行git commit时,git会启动一个提交消息编辑器,并提供一些提示,类似于以下内容:

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
#
# On branch master
# Changes to be committed:
#   new file:   bar
#

字符串
我经常发现自己在提交之前运行git log --oneline -n 10,只是为了看看提交消息是什么样子的,这样我就可以用类似的风格编写代码。因此,如果将这些信息作为额外的提示注入到提交消息编辑器中,那就太好了。像这样的东西是理想的:

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
#
# On branch master
# Changes to be committed:
#   new file:   bar
#
# Last 10 commits:
#   bbbbbbb (HEAD -> master) Another commit
#   aaaaaaa Initial commit
#


做这件事的正确方法是什么?

我所尝试的

我自然想到了git钩子,特别是prepare-commit-msg。这是我写的:

#!/usr/bin/env bash

COMMIT_MSG_FILE=$1
COMMIT_SOURCE=$2
SHA1=$3

# Show last 10 (max) commits
echo '# Last 10 commits:' >> "$COMMIT_MSG_FILE"
git log --oneline -n 10 --decorate=short | sed 's/^/#   /' >> "$COMMIT_MSG_FILE"
echo '#' >> "$COMMIT_MSG_FILE"


这大部分工作正常,除了一件事-它不工作正常。虽然这些信息现在在运行git commit时作为提示正确注入,但它也有意外的副作用,即破坏了git cherry-pickgit rebase等命令。例如,如果我有一个看起来像这样的提交:

ccccccc Add baz


我试着git cherry-pick ccccccc,结果变成了这样:

ddddddd Add baz # Last 10 commits: #   bbbbbbb (HEAD -> master) Another commit #   aaaaaaa Initial commit #


正如您所看到的,如果没有交互式编辑器,我插入的提示将无法正确解释,而不是破坏提交消息。显然这不是我想要的。我确实尝试过研究是否可以使用脚本参数仅在交互模式下注入提示,但如何做到这一点或是否可行还不清楚。

o0lyfsai

o0lyfsai1#

行为由--cleanup=$mode或配置变量commit. cleanup控制。

git commit --cleanup=strip
# Or
git -c commit.cleanup=strip commit

字符串
使用strip,无论提交消息是否被编辑,注解都会被删除。
使用default,如果提交消息被编辑,注解将被删除,如果未被编辑,注解将不被删除。

删除前导和尾随空行、尾随空格、注解并折叠连续空行。
空白
与条带相同,但未删除#注解。
缺省值
如果要编辑消息,则与条带相同。否则为空白。
所以,我认为你可以使用git config --global commit.cleanup strip

相关问题