问题
当我在不带-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-pick
和git rebase
等命令。例如,如果我有一个看起来像这样的提交:
ccccccc Add baz
型
我试着git cherry-pick ccccccc
,结果变成了这样:
ddddddd Add baz # Last 10 commits: # bbbbbbb (HEAD -> master) Another commit # aaaaaaa Initial commit #
型
正如您所看到的,如果没有交互式编辑器,我插入的提示将无法正确解释,而不是破坏提交消息。显然这不是我想要的。我确实尝试过研究是否可以使用脚本参数仅在交互模式下注入提示,但如何做到这一点或是否可行还不清楚。
1条答案
按热度按时间o0lyfsai1#
行为由--cleanup=$mode或配置变量commit. cleanup控制。
字符串
使用
strip
,无论提交消息是否被编辑,注解都会被删除。使用
default
,如果提交消息被编辑,注解将被删除,如果未被编辑,注解将不被删除。条
删除前导和尾随空行、尾随空格、注解并折叠连续空行。
空白
与条带相同,但未删除#注解。
缺省值
如果要编辑消息,则与条带相同。否则为空白。
所以,我认为你可以使用
git config --global commit.cleanup strip
。