Skip to content

Commit Guidelines

Satwik Kansal edited this page Jun 26, 2018 · 2 revisions

How To Write a Good Commit Message

Adapted from the Original Source: https://api.coala.io/en/latest/Developers/Writing_Good_Commits.html and https://wiki.gnome.org/Git/CommitMessages

Code is more often read than written!

To all the first timers to Open Source this guide might sound like an overkill, but a good descriptive commit message is a very essential part of having a maintainable "codebase".

We need good code and for achieving it, we ensure that every change to our code (i.e. the commits) is making it better.

What Makes a Good Commit

A good commit is atomic. It should describe one change and not more.

Why? Because we may create more bugs if we had more changes per commit.

How to Write Good Commit Messages

A commit message consists of 3 parts:

  • shortlog
  • commit body
  • issue reference

Example:

.editorconfig: Add a new section

Adds a new section {.py} to the .editorconfig file
in the project.

Closes https://github.com/wtfpython-web/wtfpython-web/issues/13

Shortlog

Example:

.editorconfig: Add a new section
  • Maximum of 50 characters.
    Keeping subject lines at this length ensures that they are readable, and explains the change in a concise way.
  • Should describe the change - the action being done in the commit.

  • Should not include WIP prefix.

  • Should have a tag and a short description separated by a colon (:)

    • Tag
      • The file or class or package being modified.
      • Not mandatory.
    • Short Description
      • Starts with a capital letter.
      • Written in imperative present tense (i.e. Add something, not Adding something or Added something).
      • No trailing period.

Commit Body

Example:

Adds a new section {.py} to the .editorconfig file
in the project.
  • Maximum of 72 chars excluding newline for each line.
    The recommendation is to add a line break at 72 characters, so that Git has plenty of room to indent text while still keeping everything under 80 characters overall.
  • Not mandatory - but helps explain what you're doing.

  • Should describe the reasoning for your changes. This is especially important for complex changes that are not self explanatory. This is also the right place to write about related bugs.

  • First person should not be used here.

The bot will complain if the 50/72 rule is not followed.

Issue reference

Example:

Closes https://github.com/wtfpython-web/wtfpython-web/issues/13
  • Should use the Fixes keyword if your commit fixes a bug, or Closes if it adds a feature/enhancement.
  • In some situations, e.g. bugs overcome in documents, the difference between Fixes and Closes may be very small and subjective. If a specific issue may lead to an unintended behaviour from the user or from the program it should be considered a bug, and should be addresed with Fixes. If an issue is labelled with type/bug you should always use Fixes. For all other issues use Closes.
  • Should use full URL to the issue.
  • There should be a single space between the Fixes or Closes and the URL.

Note

  • The issue reference will automatically add the link of the commit in the issue.
  • It will also automatically close the issue when the commit is accepted.
.. seealso::

    https://wiki.gnome.org/Git/CommitMessages


Editing Commit Messages

If you have previously made a commit and update it on a later date, it is advisable to also update the commit message accordingly.

In order to do this one can use the amend function as is described here.

Why Do We Need Good Commits?

  • An atomic commit is way easier to review. The reviewer thus will be able to review faster and find more bugs due to the lower complexity of the change.
  • Atomic commits are like good objects in object oriented programming - you can split up a bigger thing into many small objects. Reducing complexity is the key to developing good software and finding its bug before they occur.
  • Good commit messages make it easy to check at a glance what happened in a time range.
  • It is way easier to revert single changes without side effects. Reverting multiple commits at a time is easy, reverting a part of a commit is not.
  • git blame will be much more effective. It is the best documentation you can get. The older your code is, the more documentation it has. The better the commit messages are, the better is your hidden documentation. Your commit messages document the reason for every single change you did to any line.
  • git bisect will be much more effective. If you bisect through atomic commits to find the commit which caused a bug, you should be able to identify the real cause of the bug fastly. Good commit messages and atomicity of commits are key to that ability.
Clone this wiki locally
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy