DEV Community

Cover image for Make your Git Commit Messages better
sharath mohan
sharath mohan

Posted on • Updated on

Make your Git Commit Messages better

Have you wondered how the make awesome commit messages in open source projects?. Here’s how you can also make your git commit messages better
I am huge fan of Angular and digging through the contribution guidelines of the project I found a specific pattern, and after a brief search I came across this guideline called conventional commits, they say

A specification for adding human and machine readable meaning to commit messages

whats special

so whats special here?

The idea is to organize your commit messages, by using a standard specification, and your commit message would look somewhat like this

<type>[optional scope]: <description>

[optional body]

[optional footer(s)]
Enter fullscreen mode Exit fullscreen mode

The commit contains the following structural elements, to communicate intent to the consumers of your library:

  1. fix: a commit of the type fix patches a bug in your codebase (this correlates with PATCH in Semantic Versioning).
  2. feat: a commit of the type feat introduces a new feature to the codebase (this correlates with MINOR in Semantic Versioning).
  3. BREAKING CHANGE: a commit that has a footer BREAKING CHANGE:, or appends a ! after the type/scope, introduces a breaking API change (correlating with MAJOR in Semantic Versioning). A BREAKING CHANGE can be part of commits of any type.
  4. types other than fix: and feat: are allowed, for example @commitlint/config-conventional (based on the the Angular convention) recommends build:, chore:, ci:, docs:, style:, refactor:, perf:, test:, and others.
  5. footers other than BREAKING CHANGE: may be provided and follow a convention similar to git trailer format.
  6. Additional types are not mandated by the Conventional Commits specification, and have no implicit effect in Semantic Versioning (unless they include a BREAKING CHANGE). A scope may be provided to a commit’s type, to provide additional contextual information and is contained within parenthesis, e.g., feat(parser): add ability to parse arrays.

Now why should I use this? …

  • Automatically generating CHANGELOGs.
  • Automatically determining a semantic version bump (based on the types of commits landed).
  • Communicating the nature of changes to teammates, the public, and other stakeholders.
  • Triggering build and publish processes.
  • Making it easier for people to contribute to your projects, by allowing them to explore a more structured commit history.

easy commits

It sure has made my life easy while merging code, and boarding new people to the team.

Happy Coding!!

Discussion (0)