Use of an exclamation mark in a Git commit message via the command line
Use single quotes instead of double quotes
git commit -am 'Nailed it!'
Alternatively, if you need to use double quotes for whatever reason but still want a literal !
then turn off history expansion at the top of your script via set +H
Another way to solve that is to add a space after ! like:
git commit -am "Nailed it! "
Note the space between ! and the last ".
(The space won't be included in the commit message - Git trims trailing whitespace from commit messages automatically.)
No need to remember what quotes or escapes to use, instead
- Type your command (or part of it)
- In your command line, press
Ctr
X
E
» will open your "external editor". - Edit your command, and close your editor.
… the command will be executed & any special characters will show up correctly in the Git commit message!
(NB many other uses: typing complex commands, adding line breaks in your commit message etc.)
If you need to use double quotes and the !
is the last character in the message, just keep the !
outside of the quotes, since we're only using quotes so that the spaces get included in the message.
git commit -m "Reverting last commit because I don't like it"!
If you need to include !
mid string, you can use single quotes but if you need to use a literal single quote, you'll need to close your quote, then put the '
outside of the string by escaping it. So, let's say your message is I don't like it! Reverting again!
, this can be composed with 'I don'
+ \'
+ 't like it! Reverting again!'
git commit -m 'I don'\''t like it! Reverting again!'
Anything more complicated than this, you're probably better off with git commit
and letting git invoke your default text editor :)