1. 交互式变基
之前我们分享:常用的 Git 提交规范!,团队协同开发可能会强调git commit使用同一的格式。
同时,在 Git Push 时对 Commit 进行检查是确保团队规范执行的关键环节。
实际工作中,可能会遇到需要修改git commit描述的情况,比如,有如下几次提交
我们revert掉第二次和第三次提交:
这两条revert的提交可能过不了push检查。此时如何修改这两条commit的描述呢?
输入如下指令启动交互式变基:
git rebase -i [startpoint]
[startpoint]
可以是一个提交的哈希值或者是HEAD~n
表示相对位置的表达式。
例如,如果我们想修改哪个提交,就可以启动交互式变基到哪个提交。如,我们想修改倒数第二个的提交信息,有两种方法:
方法一:git rebase -i到倒数第三个提交:
git rebase -i 01743486d4b11231b6532729bc0b9ef9cc970bd8
方法二:可以运行git rebase -i HEAD~2
到倒数第二个提交。
把需要修改的commit从pick指令修改为reword指令,保存、退出。
就可以重新编辑:
修改最近一次提交的描述信息,有两种方式:
- git rebase -i HEAD~1
- git commit --amend
2. 校验钩子
我们可以在commit阶段或者push阶段创建校验钩子。
接着常用的 Git 提交规范!这篇文章里的git commit模板:
对应的.git/hooks/commit-msg校验逻辑设计为:
#!/usr/bin/env python3
import re
import sys
def validate_commit_message(msg):
# 检查第一行格式
first_line = msg.split('\n')[0]
if not re.match(r"^(feat|fix|refactor|test|chore|style|docs): .+", first_line):
return"第一行格式错误!应为:<类型>: 主题"
# 检查必填字段
required_fields = ["修改内容:", "影响范围:", "自测情况:", "相关链接:"]
for field in required_fields:
if field not in msg:
return f"缺少必填字段:{field}"
return None
if __name__ == "__main__":
commit_msg_file = sys.argv[1]
with open(commit_msg_file, 'r') as f:
msg = f.read()
error = validate_commit_message(msg)
if error:
print(f"COMMIT MESSAGE ERROR: {error}")
print("提交格式应为:")
print("<类型>: 主题")
print("修改内容:...")
print("影响范围:...")
print("自测情况:...")
print("相关链接:...")
sys.exit(1)
设置执行权限:
chmod +x .git/hooks/commit-msg