如何在 Git 提交信息中提交代码块

5

我的问题

在撰写提交信息时,我尝试使用“`”符号对消息进行代码格式化。
这是我的提交信息:

git commit -am"style(Nav.tsx): adheres to eslint rules

line 92 and 122: add `@returns` in docstrings"

我执行命令后,得到了这个结果

bash: @returns: command not found
[auth 57ee20c] style(Nav.tsx): adheres to eslint rules
1 file changed, 27 insertions(+), 6 deletions(-)

而且提交消息截断了。在 GitHub 上,相关行看起来像这样

line 92 and 122: add  in docstrings

我的尝试

我尝试了三个“ ` ”符号,也尝试使用<code></code>
当我使用“```”时,出现了相同的错误和问题;当我使用<code></code>时,命令未找到的错误消失了,但提交信息仍然保留着<code></code>块而没有转换。我还尝试了像这样的字符串转义。

line 92 and 122: add \`@returns\` in docstrings

与代码块类似,提交消息保留 "`" 而不是将其转换。

这与Git无关:这是Shell的问题。因为你使用双引号,所以Shell会将反引号视为“执行此命令替换”。这就是你看到“找不到命令”的错误原因。在提交消息中使用单引号。 - glenn jackman
2个回答

8

Bash中,双引号字符串会受到命令替换的影响。这就是第一个示例中反引号的作用,也是为什么你会看到bash:@returns:command not found。为了修复它,你可以像之前那样进行转义:

git commit -am "style(Nav.tsx): adheres to eslint rules

...
line 92 and 122: add \`@returns\` in docstrings"

或者使用单引号:
git commit -am 'style(Nav.tsx): adheres to eslint rules

...
line 92 and 122: add `@returns` in docstrings'

但是,反引号将被保留。提交消息是纯文本。那个屏幕截图中的花式格式由GitHub而不是git完成。我相信GitHub支持Markdown在提交消息中。(Stack Exchange也使用Markdown。)

* 顺便说一句,如果你想在Bash中进行命令替换,应该使用新语法$(command),而不是旧语法`command`


好的,谢谢,这就是我想知道的。还有一个问题:为什么我的单行提交中的反引号可以工作,但多行提交不能工作? - Luke-zhang-04
@Luke-zhang-04 嗯,我创建了一个虚拟存储库来检查,但是我无法重现单行或多行部分的行为。对不起,我不确定。 - wjandrea

3

可能发生的情况

您的shell(可能是bash或某种Bourne shell变量)具有执行命令并使用结果构建新命令行的功能。访问该功能的一种方式是使用反引号。例如,您可以执行以下操作:

echo "Today is `date`."

展示一个漂亮的句子来显示date命令的输出。

如何在提交信息中使用`

  • 使用单引号(')将信息参数括起来。Bash和sh不会在单引号字符串中执行命令替换。

    或者

  • 在编辑器中编写提交信息,而不是通过命令行传递它。不要使用-m选项及其参数。Git将打开由环境变量$EDITOR指定的编辑器让你编辑提交信息。

提交信息是纯文本

对于 Git 及其命令行工具(例如git log),提交信息是纯文本,没有任何标记语言。托管平台(如 GitHub)和第三方工具可能会在某些上下文中将该纯文本解释为某种标记语言,但不一定在所有上下文中都这样做。无论GitHub在哪里这样做,它通常会将其解释为GitHub风格的Markdown。


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