Saving Repetition with Git Commit Templates

Featured image for sharing metadata for article

Creating Your Commit Template

Do you find that you have difficulty remembering what your commits should look like? And how to best ensure that you're following best practices[1][2][3]? Do you wish there was a way to make yourself remember how to do it, for instance in the $EDITOR you're using to write the commits?

In comes git config commit.template and the ability to specify a template to be used when editing the commit message. This allows you to specify a file which contains the body of the commit message template. For instance, if following Chris Beams' example, you could have the following text in your template:

$ cat ~/.gitmessage
Summarize changes in around 50 characters or less

More detailed explanatory text, if necessary. Wrap it to about 72
characters or so. In some contexts, the first line is treated as the
subject of the commit and the rest of the text as the body. The
blank line separating the summary from the body is critical (unless
you omit the body entirely); various tools like `log`, `shortlog`
and `rebase` can get confused if you run the two together.

Explain the problem that this commit is solving. Focus on why you
are making this change as opposed to how (the code explains that).
Are there side effects or other unintuitive consequences of this
change? Here's the place to explain them.

Further paragraphs come after blank lines.

 - Bullet points are okay, too

 - Typically a hyphen or asterisk is used for the bullet, preceded
   by a single space, with blank lines in between, but conventions
   vary here

If you use an issue tracker, put references to them at the bottom,
like this:

Resolves: #123
See also: #456, #789

However, to then get this working, you need to make Git aware of this file, which can be done with either of the following commands:

# either:
$ git config --global commit.template ~/.gitmessage
# or:
$ cat ~/.gitconfig
[commit]
  template = ~/.gitmessage

This means that when you next run git commit (note the lack of -m, which is recommended against in 5 Useful Tips For A Better Commit Message) your $EDITOR will be filled with the above message. This will then give you the reminder of what to put, and to help you edit it to your heart's content. Additionally, using an editor such as Vim or Emacs will provide automatic syntax highlighting that auto wraps the content to 72 characters, and highlight the summary line when greater than 50 characters.

Using a Snippet

However, I personally don't like using a big block of text to remind me this, as I'm a bit more used to verbose commits. Instead, what I want is to easily create my commit template and be able to <TAB> through it.

I use UltiSnips as my snippet engine, which at work, has the following snippet:

snippet cmt "Git commit message"
${1:First line of commit}

${2:Multi-line, 72 char}

${3:Issue: #$4}
endsnippet

Which is then within my global template file:

$ cat ~/.gitmessage
cmt

Once hitting <TAB> in the file, I can then move around the file quickly, adding a message as follows:

Written by Jamie Tanna's profile image Jamie Tanna on , and last updated on .

Content for this article is shared under the terms of the Creative Commons Attribution Non Commercial Share Alike 4.0 International, and code is shared under the Apache License 2.0.

#blogumentation #tools #git #workflow #automation.

This post was filed under articles.

Interactions with this post

Interactions with this post

Below you can find the interactions that this page has had using WebMention.

Have you written a response to this post? Let me know the URL:

Do you not have a website set up with WebMention capabilities? You can use Comment Parade.