343

Git 在提交时会将以开头的#行视为注释行。这在使用票务跟踪系统并尝试在行首写票号时非常烦人,例如

#123 salt hashed passwords

Git 将简单地从提交消息中删除该行。有没有办法逃避哈希?我试过\and !,但没有任何效果。保留了之前的空白#,因此这也不是解决问题的有效方法。

4

9 回答 9

274

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

例如

git commit --cleanup=whitespace

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

于 2010-05-07T12:55:04.977 回答
157

请注意,从git1.8.2 (February 2013) 开始#,您可以在提交消息中的注释行中使用与 ' ' 不同的字符。

这允许您使用 ' #' 作为错误编号参考。

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

配置变量可core.commentChar用于将此 ' #' 自定义为不同的字符。


理论上,您可以输入一个core.commentChar单词(多个字符),但 git 2.0.x/2.1 会更严格(2014 年第三季度)。

请参阅Nguyễn Thái Ngọc Duy ( )提交 50b54fdpclouds

配置:严格 core.commentChar

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

带有两个逗号的测试被更新,因为它违反了这一点。它与eff80a9中引入core.commentChar的补丁一起添加(允许自定义“comment char” - 2013-01-16)。我不清楚为什么需要这种行为。


git 2.0.x/2.1 (Q3 2014) 将添加一个自动选择core.commentChar
commit 84c9dc2

什么时候core.commentChar是“ auto”,注释字符#默认以''开头,但如果它已经在准备好的消息中,则在一个小子集中找到另一个字符。这应该不会让人感到意外,因为 git 会意外删除一些行。

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

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

# ; @ ! $ % ^ & | :

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

于 2013-02-18T07:54:17.727 回答
106

这里的答案很好而且很详细,但是对于像我这样的 git noob 来说,自定义 git config 选项并不是那么明显。这是一个将注释字符从#更改为 的示例:;

git config core.commentChar ";"

这就是你需要做的。

于 2015-05-29T11:10:21.367 回答
65

您可以使用命令行选项-m

git commit -m "#123 fixed"
于 2010-05-07T12:30:56.527 回答
49

如果您正在执行交互式变基,那么当您保存提交消息时没有任何内容(因为#开头已将其作为注释,因此它被忽略了)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
于 2016-01-28T14:46:03.517 回答
37

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.
于 2016-05-05T18:47:08.720 回答
3

在 char之前使用空格 char 开始提交消息就足够了#

然后git停止将该行视为注释,并且github可以毫无问题地使用散列票号。

vim的默认语法突出显示甚至通过将颜色从评论更改为内容来暗示该功能。

在此处输入图像描述

于 2021-04-26T13:39:25.793 回答
1

我所有的提交都开始了,#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.

于 2016-09-06T12:57:08.217 回答
0

为票号使用不同的前缀。或者在票号前加上一个词,例如“Bug #42”。或者在该行前添加一个空格字符;如果你想删除那个空格,你可以为此添加一个提交钩子。

我个人不希望通过钩子完成这种提交消息操作,因为当你不希望它触发时它会非常烦人。最简单的解决方案可能是重新考虑问题。

于 2010-05-07T11:24:15.943 回答