We are using the following convention for writing git-commit messages. It is based on the one from AngularJS project(doc, commits).
<type>(<scope>): <subject>
<NEWLINE>
<body>
<NEWLINE>
<footer>
<type>
is:
- feat (feature)
- fix (bug fix)
- doc (documentation)
- style (formatting, missing semicolons, ...)
- refactor
- test (when adding missing tests)
- chore (maintain, ex: travis-ci)
- perf (performance improvement, optimization, ...)
<scope>
is a name of module or a directory which contains changed modules. For instance,
it could be
- kernel/expr
- kernel
- library/rewrite
<subject>
has the following constraints:
- use imperative, present tense: "change" not "changed" nor "changes"
- do not capitalize the first letter
- no dot(.) at the end
<body>
has the following constraints:
- just as in
<subject>
, use imperative, present tense - includes motivation for the change and contrasts with previous behavior
<footer>
is optional and may contain two items:
-
Breaking changes: All breaking changes have to be mentioned in footer with the description of the change, justification and migration notes
-
Referencing issues: Closed bugs should be listed on a separate line in the footer prefixed with "Closes" keyword like this:
Closes #123, #456