修改时没有兑现commit.template吗?

时间:2018-02-08 11:58:47

标签: git

我有一个~/.commitmessage文件,如下所示:

# If applied, this commit will...

我已经运行了git config --global commit.template ~/.commitmessage,所以现在如果我运行git commit,它会使用此缓冲区触发vim

#
# If applied, this commit will...

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
#
# On branch master
#
# Initial commit
#

这很棒,但如果我运行git commit --amend,我会得到标准的提交模板:

My previous commit message

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
#
# Date:      Thu Feb 8 08:55:13 2018 -0300
#
# On branch master
#
# Initial commit
#
# No changes

如何在修改时显示commit.template

我希望看到我以前的提交消息加上我的模板 -  类似的东西:

My previous commit message

#
# If applied, this commit will...

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
#
# Date:      Thu Feb 8 08:55:13 2018 -0300
#
# On branch master
#
# Initial commit
#
# No changes

2 个答案:

答案 0 :(得分:2)

man git-config说,这是预期的行为:

  

commit.template

     

指定要用作提交消息模板的文件的路径名。

查看实现确认它(文件builtin/commit.c,函数prepare_to_commit,只有在template_file处理没有发生时才会对变量use_message采取行动。

话虽如此 - 我认为扩展这种行为可能是合理的,我敢打赌Git维护者不会反对。我的第一种方法是添加新的配置选项commit.statustemplate,它与commit.template的工作方式几乎相同,只是将新的(已注释掉的)消息添加到新旧消息中。

答案 1 :(得分:1)

一种方法是"撤消"使用git reset HEAD~1的最新提交,然后再次提交常规git commit。这将使用模板,因为它是一个新提交 - 您的旧提交消息将不会出现在编辑器中。