通过命令行在Git提交信息中使用感叹号

180

如何在命令行中输入感叹号以作为Git提交信息的一部分?

可以用反斜杠来转义感叹号,但这样会导致反斜杠也出现在提交信息中。

我需要像这样的效果:

git commit -am "Nailed it!"

9
为了解释为什么这个问题首先存在:http://askubuntu.com/questions/434832/why-does-exclamation-mark-within-double-quotes-cause-a-bash-error - Mark Amery
可以用反斜杠来转义感叹号,但这样反斜杠也会出现在提交信息中。我在使用grep时也注意到了这种行为,但我无法理解它! - AJM
6个回答

260

使用单引号代替双引号

git commit -am 'Nailed it!'

或者,如果由于某种原因你需要使用双引号,但仍想要一个字面意义上的!,那么可以通过在脚本顶部使用set +H关闭历史扩展。


53
或者只需混合您的引号:git commit -am "$FOO: Nailed it"'!'。 (说明:该命令是用于在Git中提交更改的命令,并使用变量$FOO作为提交消息的一部分,以及一个感叹号来表示成功完成任务的兴奋情绪。) - Cascabel
4
在我的OS X系统中这个方法对我不起作用,所以我只使用了git commit(没有-m参数)来打开文本编辑器,以便输入我的提交信息。 - Kevin C.
1
在OSX中,按照@Ryan H.的回答,使用git commit -m“这是有史以来最好的代码”! - mljrg

51

另一种解决方法是在感叹号后面添加一个空格,例如:

git commit -am "Nailed it! "

请注意感叹号和最后一个引号之间的空格。

(空格不会包含在提交信息中 - Git 会自动修剪提交信息末尾的空格。)


3
对我来说,这似乎是最简单的解决方案,并允许在双引号中使用变量插值:git commit -m "$(sillyname) $(buzzphrase). $(superb)! " :) - Alex Hall
4
我对自己之前没有搜索答案感到非常沮丧。我完全不知道答案会是如此简单的解决方案。我的提交信息应该得到我一直想要的兴奋! - ctrlplusb

8

如果您需要使用双引号并且 ! 是消息的最后一个字符,请将 ! 放在引号之外,因为我们只是使用引号来确保空格被包含在消息中。

git commit -m "Reverting last commit because I don't like it"!

如果你需要在字符串中间包含 !,你可以使用单引号,但如果你需要使用一个单引号字面量,你需要关闭你的引号,然后通过转义将 ' 放在字符串外部。例如,假设你的消息是 I don't like it! Reverting again!,可以用 'I don' + \' + 't like it! Reverting again!' 来组合它。
git commit -m 'I don'\''t like it! Reverting again!'

如果有更复杂的内容,你最好使用git commit并让git调用默认文本编辑器 :)


6

无需记忆使用哪些引号或转义字符,只需:

  1. 输入您的命令(或部分命令)
  2. 在命令行中,按下 Ctr X E » 将打开您的“外部编辑器”。
  3. 编辑您的命令,并关闭您的编辑器。

… 命令将被执行,同时任何特殊字符都将正确显示在 Git 提交消息中!

(注意:还有许多其他用途,例如输入复杂命令,在提交消息中添加换行符等。)


1
这是一个非常有用的快捷方式,谢谢!在 MacOS 上运行得很好! - Patronics

1

您也可以键入:

git commit -am "Nailed it
!
"

所以只需按下回车键,在新行上放置感叹号,然后结束提交消息。有一天我偶然发现了这个方法。


9
这将在感叹号之前在提交信息中插入字面换行,看起来很丑。-1. - Mark Amery

-3

嗯。用斜杠转义似乎对我来说在提交消息中没有显示出来。

git commit -m "Nailed it\!"

反斜杠确实出现在我的提交消息中,但还是谢谢。 - Erhannis

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