Git 交互式变基修改commit描述

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

声明:本内容为作者独立观点,不代表电子星球立场。未经允许不得转载。授权事宜与稿件投诉,请联系:editor@netbroad.com
觉得内容不错的朋友,别忘了一键三连哦!
赞 1
收藏 2
关注 33
成为作者 赚取收益
全部留言
0/200
成为第一个和作者交流的人吧