使用hashmark(#)启动git commit消息

kni*_*ttl 266 git ticket-system commit ticket-tracking

Git #在提交时处理以注释行开头的行.这在使用票证跟踪系统时非常烦人,并且试图在该行的开头写入票号,例如

#123 salt hashed passwords
Run Code Online (Sandbox Code Playgroud)

git将简单地从提交消息中删除该行.有没有办法逃脱哈希?我试过\!,但没有任何工程.之前#的空白被保留,因此它们也不是解决问题的有效方法.

CB *_*ley 220

此行为是git commit默认"清理"行为的一部分.如果您想保持行开头,#可以使用其他清理模式.

例如

git commit --cleanup=whitespace
Run Code Online (Sandbox Code Playgroud)

如果这样做,则必须小心删除#不希望出现在提交中的所有行.

  • 这对于修改现有提交也很有用.例如:`git commit --amend --cleanup = whitespace` (21认同)
  • 由于这是 2020 年,每个人都只想要 [`--cleanup=scissors` 和 `[commit] cleanup = scissors`](/sf/answers/2594064651/)。它们完成了 `--cleanup=whitespace` 所做的所有事情,并自动删除每个提交消息后缀的注释变更集。 (3认同)
  • 下一个问题是:我在哪里可以编辑 git 引入的默认以 # 开头的提交消息注释? (2认同)
  • @Alex:它由`commit.template` git配置变量控制. (2认同)
  • `--cleanup=verbatim` 也很有用 (2认同)

Von*_*onC 129

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

这允许您使用' #'作为您的错误号参考.

Git在要求用户编辑编辑器中的消息时提供的各种"提示"行#默认情况下用' ' 注释掉.

所述core.commentChar配置变量可以被用于定制这个" #"为不同的字符.


从理论上讲,你可以说一个core.commentChar单词(多个字符),但git 2.0.x/2.1会更严格(2014年第3季度).

提交50b54fd阮泰玉维战(pclouds):

config:在core.commentChar上是严格的

我们不支持评论字符串(至少尚未支持).并且多字节字符编码也可能被误解.

使用两个逗号的测试会更新,因为它违反了此规则.它添加core.commentChar在eff80a9引入的补丁(允许自定义"评论字符" - 2013-01-16).我不清楚为什么要采取这种行为.


git 2.0.x/2.1(2014年第3季度)将为以下内容添加自动选择core.commentChar:
请参阅提交84c9dc2

core.commentChar为" auto"时,注释char以' #'默认开头,但如果它已经在准备好的消息中,则在一个小子集中找到另一个char.这应该可以阻止意外,因为git意外地剥离了一些行.

请注意,git不够智能,无法将' #' 识别为自定义模板中的注释字符,并在最终注释字符不同时进行转换.
它将自定义模板中的"#"行视为提交消息的一部分.所以不要将它与自定义模板一起使用.

"auto"的候选字符列表是:

# ; @ ! $ % ^ & | :
Run Code Online (Sandbox Code Playgroud)

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

  • 我喜欢这个答案.Oneliner为新建议的解决方案:`git config --global core.commentChar auto` (5认同)
  • 因此,要设置它,您可以执行以下操作,例如:`$ git config --global core.commentchar ';'` (2认同)
  • 为什么默认设置不是“自动”?感谢您的回答。 (2认同)

Mat*_*oli 75

这里的答案是好的和详细的,但对于像我这样的git noob定制git配置选项并不是那么明显.这里是从变化的示例#,以;用于注释字符:

git config core.commentChar ";"
Run Code Online (Sandbox Code Playgroud)

这就是你需要做的.

  • 对于一次性修复,请使用:`git -c core.commentChar="|" commit --amend` (将 `|` 替换为您想要的任何内容)。 (7认同)
  • 当*使用`git commit`打开配置的编辑器来编辑提交消息时,**也会*更改git添加到提交消息的默认注释文本! (3认同)

Oli*_*ier 61

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

git commit -m "#123 fixed"
Run Code Online (Sandbox Code Playgroud)

  • 但这是一个可怕的提交信息.确保包含错误以及修复方法 (35认同)
  • 如果错误跟踪系统突然损坏并且您没有备份,则不会!:) (5认同)
  • 只要有许多错误,提交消息就可以 (2认同)

Owa*_*ams 30

如果你正在进行交互式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
Run Code Online (Sandbox Code Playgroud)

所以,只需修改消息:

git commit --amend -m "#123 salt hashed passwords"
Run Code Online (Sandbox Code Playgroud)

继续坚持:

git rebase --continue
Run Code Online (Sandbox Code Playgroud)


Sun*_*gam 25

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.
Run Code Online (Sandbox Code Playgroud)

  • 我相信我已经弄清楚了这件事的真相。Git 确实插入了 `# ------------------------ &gt;8 ----------------- -------` 在使用 `scissors` 时状态文本“看起来你可能是……”之前;但是,它会在“# Conflicts: …”文本之后插入剪刀线。我在“.gitconfig”中设置了“commit.status = false”,所以我没有看到任何状态文本,只看到冲突文本。我纠正了;更改为赞成票。 (2认同)

hel*_*ete 10

只需在字符 之前使用空格字符来开始提交消息即可#

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

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

在此输入图像描述

  • 但是前导空格会包含在提交消息中还是会被删除?我不想让提交消息以不可见的字符开头。这将导致以后出现问题 (5认同)
  • 我能想到的几个问题和问题: 1)缩进不一致 2)(也)提取票号的简单脚本可能会在前导空格上失败 3)为什么要在每条提交消息中存储一个额外的空格字符?4) 太容易忘记 [5) 最后:它实际上并不是以哈希字符开始提交消息,而是以空格开始;)] (2认同)
  • @knittl:是的,鱼与熊掌不可兼得。我提到这种方法是因为在我看来,它是迄今为止最简单的方法,同时允许以哈希值开始消息(不计算空格)并保留基于哈希值的注释功能。只有第二点是一种问题,但恕我直言,更多的是一个假设的问题。不管怎样,谢谢你的讨论;-) (2认同)