如何更改默认的Git提交消息

6

我在 prepare-commit-msg 文件中添加了一些提交信息的更改,然后执行以下命令:

git config --global commit.template .git/hooks/prepare-commit-msg

此后,当我执行 git commit 命令时,会收到如下所示的消息:

40 行我的更改内容,然后是提交信息。

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.   
# Explicit paths specified without -i nor -o; assuming --only paths... 
# On branch master
# Changes to be committed:
#
#       modified:   test
#    

问题是有没有办法将此默认消息显示在顶部?或者更好的永久删除此消息?

1个回答

10
看起来您混淆了commit.template选项(为git commit--template选项提供默认值)和prepare-commit-message钩子。
通常git commit使用以下操作序列:
  1. 运行 pre-commit 钩子,如果存在且可运行,则运行。 如果它退出非零,则中止提交。
  2. 将任何指定或配置的模板(见下文)复制到临时文件中。 如果没有模板或模板路径不可读,则开始为空临时文件。
  3. 添加行 # 请输入提交消息...git status的输出。
  4. 在临时文件上运行prepare-commit-message钩子,如果存在且可运行。
  5. 在临时文件上打开编辑器。(您的编辑器设置来自于$GIT_EDITOR、core.editor配置、$VISUAL、$EDITOR或内置默认值,以首先设置的为准。)
  6. 一旦您退出编辑器,即进行提交,或停止提交,具体取决于是否提供了提交消息。
如果使用-f-m选项,则通常跳过步骤2、3和5(尽管您可以通过添加--edit强制Git打开您的编辑器)。 您可能没有使用那些选项。 --template选项的作用——因此commit.template的作用——是提供git commit在第2步将要复制的文件的路径名。 这不会影响第3步添加的行。 虽然路径.git/hooks/prepare-commit-message(可能)是Git可以读取的文件,但这不是您模板的一个非常明智的名称,因为如果相同的路径被设置为可执行文件,则该文件将变为可运行文件,并且第4步可能表现得很差。
您可以通过添加--no-status告诉git commit不要执行第3步。(另外,有点奇怪的是,显式禁止第5步的--no-edit也会禁止第3步。)
或者,您可以利用第4步来消除一些或所有的git status输出和标准的# 请输入...消息。 prepare-commit-message钩子可以对模板文件进行任意更改。
请注意,--cleanup=<mode> 会影响最终提交消息的内容以及步骤6的处理。有关详细信息,请参见 git commit 文档

哦,谢谢你的回答,但是现在我还不明白为什么第四步会有问题?你能解释一下吗?另外,我发现这个命令 -> > git config --global commit.status false而且我发现这个命令可以删除git提交时的模板“请输入...”的问题,这样做好吗?还有,我该如何将这些更改(在配置文件上)推送到其他分支?或者我应该在主分支上进行更改? - Adrianeo
1
在第4步,如果可能的话,git将在.git/hooks/prepare-commit-message运行文件。 如果您在此文件中放置普通文本,则如果git成功运行它会发生什么?至于commit.status,将其设置为false会使--no-status成为默认选项,因此这是一个合理的方法。 同时,更改分支时您的配置(无论是--global还是本地)不是git更改的内容,因此没有问题。 - torek

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接