Good Git Commit Message
why good commit
git commit 是当次 committing 更改的简短描述。良好的 commit message 不仅仅有利于与和他人合作,而且能很方便的追踪工作记录。
how to write
commit message 格式
format: [emoji] <type>(scope): <message>
- emoji:options
- type: require
- scope:require
- message(description): requiretype
- feat: a new feature
- fix: a bug fix
- improvement: an improvement to a current feature
- docs: documentation only change
- style: everything related to styling
- refactor: a code change that is neither a bug fix nor a feature addition
- test: everything related to testing
- chore: updating build task, package manager config, etc
scope
- 当前 commit 影响范围
descript
- 当前 commit 简短描述
emojis type
one style
when adding a file or implementing a feature
when fixing a bug or issue
when improving code or comments
when improving performance
when updating docs or readme
when dealing with security
when updating dependencies or data
when a new release was built
when refactoring or removing linter warnings
when removing code or files
another style
[tada] initial commit
[Add] when implementing a new feature
[Fix] when fixing a bug or issue
[Refactor] when refactor/improving code
[WIP]
[Minor] Some small updates
gitHook
package.json
"githook": {
"pre-commit": "lint-staged",
"commit-msg": "node scripts/verifyCommitMsg.js"
}scripts/verifyCommitMsg.js
const chalk = require("chalk")
// const msgPath = process.env.HUSKY_GIT_PARAMS;
const msgPath = process.env.GIT_PARAMS
const msg = require("fs").readFileSync(msgPath, "utf-8").trim()
const commitRE =
/^(v\d+\.\d+\.\d+(-(alpha|beta|rc.\d+))?)|((revert: )?(feat|fix|docs|style|refactor|perf|test|workflow|ci|chore|types)(\(.+\))?!?: .{1,50})/
if (!commitRE.test(msg)) {
console.error(
` ${chalk.bgRed.white(" ERROR ")} ${chalk.red(
`invalid commit message format.`,
)}\n\n` +
chalk.red(
` Proper commit message format is required for automated changelog generation. Examples:\n\n`,
) +
` ${chalk.green(`feat(compiler): add 'comments' option`)}\n` +
` ${chalk.green(`fix(menu): handle events on blur (close #28)`)}\n\n` +
chalk.red(` See .gitlab/commit-convention.md for more details.\n`),
)
process.exit(1)
}tools
commitizen
gitmoji-cli
references
- https://gitmoji.carloscuesta.me/
- https://github.com/carloscuesta/gitmoji-cli
- https://www.conventionalcommits.org/en/v1.0.0/
- https://udacity.github.io/git-styleguide/