良好的Commit能体现程序员的职业素养。
一、运行环境搭建
apt-get install python3-pip
pip3 install inquirer
二、git-inquirer配置代码
将以下代码内容保存到/usr/bin/git-inquirer,赋予可执行权限,然后输入git-inquirer即可生成一个交互式窗口来规范commit输入。
#!/bin/python3
import inquirer
import sys
from string import Template
import subprocess
def number_validation(answers, current):
return int(current)
def empty_validation(answers, current):
return bool(current)
def no_validation(answers, current):
return True
def addList(name, message, list):
return inquirer.List(name, message, list)
def addText(name, message, valid):
return inquirer.Text(name, message, validate=valid)
def addCheck(_name, _message, _choices):
return inquirer.Checkbox(_name, message=_message, choices=_choices)
questions = [
addCheck("action", "选择非选项(空格选择,回车跳过)", ['Bug', 'Issue', 'Task'])
]
optinalAnswers = inquirer.prompt(questions)
questions = [
addList('action', "select you action", ['fix', 'feat', 'refactor', 'docs', 'chore', 'style', 'pref', 'test']),
addText("module", "input module name", no_validation),
addText('title', "input title", empty_validation),
addText('description', "input description", empty_validation),
addText("log", "input log", empty_validation),
]
optinal = {
"Bug": addText("bug", "input bug id", empty_validation),
"Issue": addText("issue", "input issue id", empty_validation),
"Task": addText("task", "input task id", empty_validation),
}
optinalMap = {
"Bug": "bug",
"Issue": "issue",
"Task": "task",
}
for action in optinalAnswers["action"]:
questions.append(optinal[action])
answers = inquirer.prompt(questions)
template = '${action}'
if answers["module"]:
template += '(${module})'
template += ': ${title}
Description: ${description}
Log: ${log}
'
for action in optinalAnswers["action"]:
template += action + ": ${" + optinalMap[action] + "}
"
subprocess.run(["git", "commit", "-m", Template(template).substitute(answers)])
三、常用参数解释
优雅的提交Commit信息,也使用Angular团队提交规范。启动git-inquirer的常用注释如下:
一、主要有以下组成:
标题行: 必填, 描述主要修改类型和内容
主题内容: 描述为什么修改, 做了什么样的修改, 以及开发的思路等等
页脚注释: 放 Breaking Changes 或 Closed Issues
二、常用的修改项有:
type: commit 的类型
feat: 新特性
fix: 修改问题
refactor: 代码重构
docs: 文档修改
style: 代码格式修改, 注意不是 css 修改
test: 测试用例修改
chore: 其他修改, 比如构建流程, 依赖管理
scope: commit 影响的范围, 比如: route, component, utils, build...
subject: commit 的概述
body: commit 具体修改内容, 可以分为多行
footer: 一些备注, 通常是 BREAKING CHANGE 或修复的 bug 的链接
三、撤销commit
执行完commit后,想撤回commit,仅仅是撤回commit操作,您写的代码仍然保留。
git reset --soft HEAD^
注:HEAD^的意思是上一个版本,也可以写成HEAD~1。
如果你进行了2次commit,想都撤回,可以使用HEAD~2
// 如果commit注释写错了,只是想改一下注释,只需要:
git commit --amend
参考:
Franklin-Qi
阮一峰
inquirer