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