使用hashmark(#)启动Git提交消息

Git在提交时将以#开头的行视为注释行。在使用票务跟踪系统时,试图将票号写在行首是非常令人讨厌的。

#123 salt hashed passwords

Git会简单地从提交消息中删除这一行。是否有一种方法来逃避散列?我尝试了\!,但没有工作。#之前的空格被保留,所以这也不是一个有效的解决方案。

78821 次浏览

使用不同的票号前缀。或者在票号前加上一个词,比如“Bug #42”。或在行前加上一个空格字符;如果你想移除空白,你可以添加一个commit-hook。

我个人不希望这种提交消息操作由钩子完成,因为当它在你不想要的时候触发时,它会非常令人恼火。最简单的解决办法可能是重新思考这个问题。

你可以使用命令行选项-m:

git commit -m "#123 fixed"

此行为是git commit默认的“清理”行为的一部分。如果你想保持以#开头的行,你可以使用另一种清理模式。

如。

git commit --cleanup=whitespace

如果你这样做,你必须小心删除所有你不想在提交中出现的#行。

注意,由于git1.8.2(2013年2月),你可以在提交消息的注释行中使用不同于'#'的字符。

这允许您使用'#'作为bug号引用。

各种“hint"Git要求用户在编辑器中编辑消息时给出的行默认用'#'注释掉。

core.commentChar配置变量可以用来自定义这个'#'为不同的字符。


理论上,你可以放了一个core.commentChar单词(多个字符),但git 2.0.x/2.1将更严格(2014年Q3)。

参见提交50 b54fd by ngibmc Duy (pclouds):

config:严格的core.commentChar

我们不支持注释字符串(至少现在还不支持)。多字节字符编码也可能被误解。

带有两个逗号的测试被更新,因为它违反了这一点。它与补丁一起添加在eff80a9中引入core.commentChar (Allow custom "comment char"- 2013-01-16)。我不清楚为什么的行为是想要的。


git 2.0.x/2.1(2014年Q3)将为core.commentChar添加一个自动选择 看到提交84年c9dc2 < / p >

core.commentChar是"auto"时,评论字符默认以'#'开头,但如果它已经在准备好的消息中,请在一个小子集中找到另一个字符。这应该会停止意外,因为git会意外地删除一些行。

注意,git还不够聪明,无法在自定义模板中将'#'识别为注释字符,并在最终的注释字符不同时将其转换。
它认为自定义模板中的“#”行是提交消息的一部分。所以不要在自定义模板中使用这个

“auto”的候选字符列表;是:

# ; @ ! $ % ^ & | :

这意味着像git commit -m '#1 fixed issue'这样的命令会自动将commentChar切换到';',因为在提交消息中使用了'#'。

这里的答案很好,也很详细,但是对于像我这样的git新手来说,定制git配置选项并不是那么明显。下面是一个将注释字符从#更改为;的示例:

git config core.commentChar ";"

这就是你所需要做的。

如果你正在做一个交互式的rebase,那么当你保存你的提交消息时,里面什么都没有(因为开头的#已经把它作为一个注释,因此它被忽略了),git会告诉你该怎么做:

Aborting commit due to empty commit message.
Could not amend commit after successfully picking 5e9159d9ce3a5c3c87a4fb7932fda4e53c7891db... 123 salt hashed passwords
This is most likely due to an empty commit message, or the pre-commit hook
failed. If the pre-commit hook failed, you may need to resolve the issue before
you are able to reword the commit.
You can amend the commit now, with


git commit --amend


Once you are satisfied with your changes, run


git rebase --continue

所以,只需修改信息:

git commit --amend -m "#123 salt hashed passwords"

并继续调整基数:

git rebase --continue

应该使用git commit --cleanup=scissors。它在2014.05.21被添加到Git v2.0.0

git commit --help

--cleanup=<mode>
scissors
Same as whitespace, except that everything from (and including) the line
"# ------------------------ >8 ------------------------" is truncated if the message
is to be edited. "#" can be customized with core.commentChar.

我所有的提交都以#issueNumber开始,所以我把这个样板文件放在我的vim .git/hooks/commit-msg中:

NAME=$(git branch | grep '*' | sed 's/* //')
echo "$NAME"' '$(cat "$1") > "$1"

所以让我们假设我们有分支#15,我们提交消息add new awesome feature。使用这种方法,最终提交消息将是#15 add new awesome feature

只要在#字符之前用一个空格字符 开始提交消息就足够了。

然后git停止将该行视为注释,并且github可以使用散列后的票号而不会出现任何问题。

vim的默认语法高亮显示甚至通过将颜色从commentish更改为contentish来建议该功能。

enter image description here

!是一个历史扩展这就是为什么它没有工作。

历史扩展是由历史扩展字符的出现引入的,默认为!

你可以使用带有单个'引号(转义Bash中单引号字符串中的单引号)的$:

$ git commit -m $'#228 update to a new version! margin of error is 33% | 33^*0.22;'
# commit message: #228 update to a new version! margin of error is 33% | 33^*0.22;
$ git commit -m $'docs!: new API reference for GPS horse navigation'
# commit message: docs!: new API reference for GPS horse navigation

如果没有使用$',而是使用":

$ git commit -m "docs!: new API reference for GPS horse navigation"
bash:  : unrecognized history modifier

如果与"一起使用并转义\ (\仍然存在,或者我做错了什么):

$ git commit -m "docs\!: new API reference for GPS horse navigation"
# commit message: docs\!: new API reference for GPS horse navigation