Instantly share code, notes, and snippets.

What would you like to do?
Conventional Commit Messages

Conventinal Commit Messages

See how a minor change to your commit message style can make a difference.


<type>(<scope>): <subject>
empty separator line
empty separator line

Commit Message Examples


  • feat A code change that adds a new feature
  • fix A code change that adds a bug fix
  • refactor A code change that neither adds a new feature nor fixes a bug
  • style A code change that do not affect the meaning (white-space, formatting, missing semi-colons, etc)
  • test Changes that add missing tests or correcting existing tests
  • docs Changes that affect documentation only
  • build Changes that affect the build system or external dependencies

  • revert A revert commit
    • In this case subject should be the header of the reverted commit. The Body should say: This reverts commit .


The scope provides additional contextual information.

  • Is an optional part of the format
  • Allowed Scopes depends on the specific project


The subject contains a succinct description of the change.

  • Is a mandatory part of the format
  • Use the imperative, present tense: "change" not "changed" nor "changes"
  • Don't capitalize the first letter
  • No dot (.) at the end


The body should include the motivation for the change and contrast this with previous behavior.

  • Is an optional part of the format
  • Use the imperative, present tense: "change" not "changed" nor "changes"


The footer should contain any information about Breaking Changes and is also the place to reference Issues that this commit refers to.

  • Is an optional part of the format
  • optionally reference an issue by its id.
  • Breaking Changes should start with the word BREAKING CHANGE: folowed by space or two newlines. The rest of the commit message is then used for this.


  • feat(shopping cart): add the amazing button
  • feat: remove ticket list endpoint
    refers to JIRA-1337
    BREAKING CHANGE: ticket enpoints no longer supports list all entites.
  • fix: add missing parameter to service call
    The error occurred because of <reasons>.
  • build: release version 1.0.0
  • build: update dependencies
  • refactor: implement calculation method as recursion
  • style: remove empty line
  • revert: refactor: implement calculation method as recursion
    This reverts commit 221d3ec6ffeead67cee8c730c4a15cf8dc84897a.

Git Prereceive Hook Script to ensure commit message header format

#!/usr/bin/env bash

# Pre-receive hook that will block commits with messges that do not follow regex rule

commit_msg_header_regex="^Merge .+$|^(revert: )?${commit_msg_type_regex}(\(${commit_msg_scope_regex}\))?: ${commit_msg_subject_regex}$"


# Do not traverse over commits that are already in the repository
excludeExisting="--not --all"

while read oldrev newrev refname; do
  # branch or tag get deleted
  if [ "$newrev" = "$zero_commit" ]; then

  # Check for new branch or tag
  if [ "$oldrev" = "$zero_commit" ]; then
    rev_span=`git rev-list $newrev $excludeExisting`
    rev_span=`git rev-list $oldrev..$newrev $excludeExisting`

  for commit in $rev_span; do
    commit_msg_header=$(git show -s --format=%s $commit)
    if ! [[ "$commit_msg_header" =~ ${commit_msg_header_regex} ]]; then
      echo "$commit" >&2
      echo "ERROR: Invalid commit message format" >&2
      echo "$commit_msg_header" >&2

if [ -n "$error" ]; then
  exit 1


Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment