A well-written commit message not only explains what was done, but also why it was done, making it an invaluable tool for teams and future maintainers. This article provides concise, actionable tips and examples to help developers learn how to write better commit messages, enhancing team collaboration and project maintainability.

The Basics of a Good Git Commit Message

Before diving into advanced tips, let’s ensure the basics are covered. A good git commit message should clearly and succinctly describe the what and the why of the commit. Here are some fundamental practices:

1. Keep the Subject Line Concise and Informative

Limit the subject line to 50 characters. This forces you to focus on the key change, making the message clear and easy to skim.

Example: Instead of “fixes,” write “Fix user login issue.”

2. Use the Imperative Mood

Write your commit message as if giving an order or instruction. This aligns with git’s own conventions when it auto-generates messages.

Example: Use “Add” instead of “Added,” and “Fix” instead of “Fixes.”

3. Provide Context in the Body

Separate the body from the subject line with a blank line, and use it to explain the why and how of the changes, especially for complex adjustments.

Example:

Add JSON parsing capability

Include a new JSON parser to handle incoming payload more efficiently than the previous XML parser, reducing latency for end users.

4. Reference Issue or Ticket IDs

Link the commit to related issues or tickets for additional context and tracking purposes.

Example: Append “Closes #123” to connect a commit to a GitHub issue or Jira ticket.

Advanced Strategies for Effective Commit Messages

Moving beyond the basics, here are some advanced strategies to refine your git practices further.

[Tip]: ☝️How to undo a Git Commit 👇

5. Craft a Narrative

Explain not just what was changed but why it was necessary. This turns a functional message into a piece of the project’s story.

Example:

Refactor database connection logic

Update the DB connection class to use singleton pattern, reducing the number of simultaneous connections under heavy load and improving response times during peak usage.

6. Emphasize Small, Focused Commits

If you struggle to summarize a commit, it might be doing too much. Focused commits make for easier review and clearer messages.

Example: “Optimize image loading” rather than a vague “Update image handling.”

7. Use Git Commands for Managing Complex Changes

For larger features, utilize git reset, git rebase -i, and git cherry-pick to organize and clean up your commit history. This makes each commit a readable “chapter” of your development story.

Example: To combine related changes into a single commit, you might use:

git rebase -i HEAD~4  # Interactively rebase the last four commits

8. Fill in the Blank: “If this commit is applied, it will …”

This technique forces you to describe the commit’s impact in a clear and direct way.

Example: “Enable users to reset their password directly from the login screen.”

Conclusion

Clear commit messages are a keystone of successful development projects. They facilitate effective reviews, simplify maintenance, and help all team members understand the evolution of a codebase. By adhering to these tips and integrating the examples provided, developers can enhance both their workflow and their communication within the team. Remember, a commit message is more than just a technical description—it’s a record of your project’s history and your decision-making process.