bounty将在4天后过期。回答此问题可获得+200声望奖励。buhtz希望引起更多人关注此问题。
commit.template
中的消息模板仅用于new提交,因此在执行git merge --squash mybranch && git commit -a
时没有使用它。
有没有类似merge.template
或其他解决方案的东西,我可以修改默认消息,显示在编辑器中时,做合并?
∮我在普通提交中看到的
在执行git commit -a
时,在我选择的编辑器中打开此对话框:
This is my commit message template set via "git config commit.template".
# Bitte geben Sie eine Commit-Beschreibung für Ihre Änderungen ein. Zeilen,
# die mit '#' beginnen, werden ignoriert, und eine leere Beschreibung
# bricht den Commit ab.
#
# Auf Branch main
# Ihr Branch ist auf demselben Stand wie 'origin/main'.
#
# Zum Commit vorgemerkte Änderungen:
# geändert: README.md
#
# Unversionierte Dateien:
# my-commit-msg-tempalte
在git merge --squash
之后我看到了什么
这出现在我选择的编辑器中,当做git merge --squash myfix && git commit -a
的时候。模板消息不在那里!
Squashed commit of the following:
commit 9474d601e6b3ed33efc432f623c08e7931095ba0
Author: buhtz <c.buhtz@posteo.jp>
Date: Mon Mar 13 09:22:33 2023 +0100
commit three
commit 2f6524da10a6c3fba8963761abcd3b5ba3d19f12
Author: buhtz <c.buhtz@posteo.jp>
Date: Mon Mar 13 09:22:25 2023 +0100
commit two
commit 5520ea8e2e75a29e06322a742a4b40dbbb74b3ee
Author: buhtz <c.buhtz@posteo.jp>
Date: Mon Mar 13 09:22:17 2023 +0100
commit one
# Bitte geben Sie eine Commit-Beschreibung für Ihre Änderungen ein. Zeilen,
# die mit '#' beginnen, werden ignoriert, und eine leere Beschreibung
# bricht den Commit ab.
#
# Auf Branch main
# Ihr Branch ist 1 Commit vor 'origin/main'.
# (benutzen Sie "git push", um lokale Commits zu publizieren)
#
# Zum Commit vorgemerkte Änderungen:
# geändert: README.md
# geändert: spiel.py
#
# Unversionierte Dateien:
# my-commit-msg-tempalte
∮我想要的∮
在做了git merge --squash myfix && git commit -a
之后,我希望我的编辑器能在模板所在的地方产生这样的东西。压缩提交消息是一个很好的东西,但对我来说不是强制性的。
This is my commit message template set via "git config commit.template".
Squashed commit of the following:
commit 9474d601e6b3ed33efc432f623c08e7931095ba0
Author: buhtz <c.buhtz@posteo.jp>
Date: Mon Mar 13 09:22:33 2023 +0100
commit three
commit 2f6524da10a6c3fba8963761abcd3b5ba3d19f12
Author: buhtz <c.buhtz@posteo.jp>
Date: Mon Mar 13 09:22:25 2023 +0100
commit two
commit 5520ea8e2e75a29e06322a742a4b40dbbb74b3ee
Author: buhtz <c.buhtz@posteo.jp>
Date: Mon Mar 13 09:22:17 2023 +0100
commit one
# Bitte geben Sie eine Commit-Beschreibung für Ihre Änderungen ein. Zeilen,
# die mit '#' beginnen, werden ignoriert, und eine leere Beschreibung
# bricht den Commit ab.
#
# Auf Branch main
# Ihr Branch ist 1 Commit vor 'origin/main'.
# (benutzen Sie "git push", um lokale Commits zu publizieren)
#
# Zum Commit vorgemerkte Änderungen:
# geändert: README.md
# geändert: spiel.py
#
# Unversionierte Dateien:
# my-commit-msg-tempalte
2条答案
按热度按时间qij5mzcb1#
虽然某些Git仓库远程托管服务like GitLab可能会提供适当的合并消息模板,但您需要一个本地钩子来修改合并消息。
例如,
prepare_commit_msg
本地挂接(Git 2.24+, Q4 2019)它需要一到三个参数。
message
(如果给出了-m
或-F
选项);template
(如果给出了-t
选项或设置了配置选项commit.template
);merge
(如果提交是合并或者存在.git/MERGE_MSG
文件);squash
(如果存在.git/SQUASH_MSG
文件);或commit
,后跟提交对象名称(如果给定了-c
、-C
或--amend
选项)。在这个钩子中,您可以(当第二个参数是
merge
或squash
时)编写一个脚本,将merge.template
与当前的squash消息组合在一起。git config commit.template
引用的文件中。.git/MERGE_MSG
或.git/SQUASH_MSG
(在您的情况下:后者)。但是修改
.git/SQUASH_MSG
并退出0,由git merge --squash
创建的合并压缩提交将集成提交模板。为了说明这一点,我不想修改提交或提交消息,我想在完成合并压缩和提交后打开带有提交消息模板的编辑器。
那么您的
prepare_commit_msg
钩子就可以像这样简单:这将把模板放到准备好的提交消息中,并打开编辑器。
编辑器关闭后,修改后的
.git/SQUASH_MSG
将用于最终提交。在这种情况下,不需要
git commit -a
。uplii1fm2#
当你执行
git merge --squash
时,一个包含新提交信息的文件被写入.git/SQUASH_MSG
,它优先于你的提交模板,并且没有任何选项可以覆盖它。您可以在合并后简单地删除该文件。
有很多方法可以帮助您删除该文件,但最简单的方法是创建一个别名来为您执行此操作:
现在您可以执行
git my-merge-squash mybranch
而不是git merge --squash mybranch
。你可以给你的别名取任何你喜欢的名字,比如
ms
。但如果您通常在每次合并后执行
git commit -a
,则可以配置别名以同时执行所有操作:应该可以在squash消息前面添加模板,但这需要编写一个脚本并将其添加到
$PATH
中。如果您对此感兴趣,请在评论中告诉我。