为什么git接受以hash符号开头的提交消息

时间:2017-02-21 03:48:38

标签: git atlassian-sourcetree

使用Git 2.11.1.windows.1,SourceTree 1.10.20.1。

我虽然默认情况下git忽略在提交消息中以#开头的行。但是,使用SourceTree,我尝试了多行提交消息:

  

测试多行提交消息
  #Line 2
  #第3行

令人惊讶的是,所有3行都被记录为提交消息(由git log看到)。也许git nned配置了默认的注释字符,所以我设置

git config --global core.commentChar "#"

然后通过git reset --soft HEAD^撤消提交并使用相同的3行消息重新发送(使用SourceTree,不知道如何在命令行中创建多行提交消息)。以#开头的行仍然被接受。

评论行如何在git commit消息中工作?

1 个答案:

答案 0 :(得分:2)

#作为评论不是Git提交消息的规则。相反,它是通过编辑器编写提交消息的规则。

AFAIK这是为了让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:   what
#

保存为.git/COMMIT_EDITMSG。编辑关闭时,Git会读取该文件,删除注释(以及其他特殊内容),并使用剩下的内容作为提交消息。

来自git-commit docs ...

  

$ GIT_DIR / COMMIT_EDITMSG

     

此文件包含正在进行的提交的提交消息。如果git commit在创建提交之前由于错误而退出,则用户提供的任何提交消息(例如,在编辑器会话中)将在此文件中可用,但将在下一次调用git commit时被覆盖。

您可以通过不提供未注释的行来中止提交。

例如,如果您使用git commit -m,则不需要任何此类内容,并且以#开头的消息也可以。

$ git ci -m '# message with a comment'
[master 7c6a630] # message with a comment
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 that
$ git log
commit 7c6a630a9c84fda585601edef0b18e7a8683dffa (HEAD -> master)
Author: Michael G. Schwern <schwern@pobox.com>
Date:   Wed Feb 22 20:51:36 2017 -0800

    # message with a comment
$ cat .git/COMMIT_EDITMSG
# message with a comment

git commit has an option to control this behavior, --cleanup。有各种模式可以删除注释,清理空格或什么都不做。如果要编辑消息,则默认为&#34; 与strip相同。否则就是空白。&#34;这可以使用commit.cleanup配置变量控制。

如果确实想要,您可以使用a commit-msg hook确保评论始终被删除。