Skip to content

GIT操作规范

分支管理

分支类型及用途

  • feature分支

    • 用于开发新功能,是当前开发的主分支
    • 完成后合并到develop分支
  • develop分支

    • 主要用来保留可运行的版本(不保证无BUG)
    • 作为feature分支的备份分支
    • 记录开发进度,方便feature分支开发失败后回退
    • 仅通过合并feature分支更新,不直接在此分支上开发
    • 作为持续集成的主要分支
  • main分支

    • 用于发布新版本,保持稳定无重大bug
    • 仅通过合并develop分支更新,不直接在此分支上开发
    • 每次合并都应该标记版本号

提交信息规范

虽然不是所有提交信息都严格遵守,但都会尽量遵守以下规范。

基本格式

type|type: title

- type|type(scope|scope): body

- type|type(scope|scope): body

类型说明

  • type(必填,可多个叠加):

    • feat:新功能
    • fix:Bug修复
    • docs:文档更新
    • style:代码格式调整(不影响逻辑)
    • refactor:代码重构
    • test:测试相关
    • chore:构建过程或辅助工具的变动
    • perf:性能优化
    • revert:回滚提交
  • scope(必填,可多个叠加):影响范围(模块名、文件名)

  • title(必填):提交标题(中文)

  • body(必填):变更描述(中文)

提交示例

feat|refactor|style: 优化迷宫墙壁冲突检测算法并增加调试输出
- refactor(settings): 移除冗余配置并添加clang-format支持
- style(main): 添加迷宫参数调试输出
- feat(maze_generator): 增加随机点对差值调试信息

合并请求(Pull Request)规范

目的

其实我合并的主要目的就是同步,不存在其他目的,所以我的合并其实和提交没有太大的区别。

基础格式

基本参考提交示例即可,但PR还有额外信息需要填写。

多提交PR

如果一个PR包含多个提交,则需要会对其进行压缩,以便更好地展示提交内容。

操作示例(feature合并到develop):

  1. 从develop分支创建并切换临时分支temp_merge
  2. 把feature压缩合并到temp_merge
  3. 托管仓库中创建PR,PR把temp_merge合并到develop。
  4. 删除临时分支temp_merge
  5. 为了直观,把develop快速合并到feature

PR完整格式

相较于一般的提交,其实也就多了个同步信息。从哪个分支到哪个分支,同步了哪些提交。

markdown
type|type: title(同步)

- type|type(scope|scope): body

- type|type(scope|scope): body

从branch1到branch2的同步

- 同步提交1(最新):commit1_title

- 同步提交2: commit2_title

常见Git操作

生成差异文件

bash
# 工作区与最新提交比较
git diff HEAD > all_changes.patch

GIT小工具

其实完全让我来,我也不会写的那么规范,但我们可以借助AI来生成提交信息。

注意AI生成也只是相当于给个大体的结构,具体的提交信息和一些小细节还是需要自己补上的。

生成提交信息操作示例

  1. 获取所有变更内容:git diff HEAD > all_changes.patch
  2. 调用AI生成提交信息:提问方法可以参考下面的例子。
txt
我需要你按以下要求填写提交信息:

提交信息规范如下
type|type: title
- type|type(scope|scope): body
- type|type(scope|scope): body
以下是辅助说明
title:提交的标题(必填)中文
type:修改部分的类型(必填)
 - feat:新功能
 - fix:Bug 修复
 - docs:文档更新
 - style:代码格式调整(不影响逻辑)
 - refactor:代码重构(既不是新功能也不是 Bug 修复)
 - test:测试相关
 - chore:构建过程或辅助工具的变动
 - perf:性能优化
 - revert:回滚之前的提交
scope:影响的范围(如模块名、文件名)(必填)
body:简短描述(中文)(必填)

提交示例:
feat|refactor|style: 优化迷宫墙壁冲突检测算法并增加调试输出。
refactor(settings): 移除冗余配置并添加clang-format支持
style(main): 添加迷宫参数调试输出
feat(maze_generator): 增加随机点对差值调试信息

以下是文件的变更内容:
#复制所有变更内容到这里,如果使用智能体也可以直接引用。
all_changes.patch

生成合并信息

虽然还是借助AI生成,但由于多合并的更改往往非常多代码,所以生成合并信息也需要一些技巧。

毕竟太多的更改会导致主题信息占比低,AI把握不到重点、幻觉严重。当然,要是AI不发病的话,当然是直接按提交的方式让他生成会更好一点。

如果你之前的提交都按照规范提交,那么生成合并信息可以考虑只把提交信息交给AI。

生成合并信息操作示例

  1. 获取所有提交信息: 注意,这是bash脚本,zsh和powershell可能无法运行
bash
#!/bin/bash

git_log_to_file() {
    # 确保传递了正确的参数数量
    if [ $# -ne 3 ]; then
        echo "错误:参数数量不正确"
        echo "用法: git_log_to_file <提交数量> <分隔符模式> <输出文件>"
        echo "示例: git_log_to_file 5 '----提交信息%d----' commits.txt"
        return 1
    fi

    local N=$1
    local SEPARATOR_PATTERN=$2
    local OUTPUT_FILE=$3

    # 清空输出文件
    > "$OUTPUT_FILE"

    # 获取提交数量
    local count=$(git rev-list --count HEAD)
    if [ $count -eq 0 ]; then
        echo "错误:仓库中没有提交"
        return 1
    fi

    # 处理N大于实际提交数的情况
    if [ $N -gt $count ]; then
        N=$count
        echo "警告:请求的提交数 ($N) 超过总提交数 ($count),已自动调整为 $count"
    fi

    # 一次性获取所有提交信息
    git log -n $N --format="%H" | while IFS= read -r sha; do
        # 计数器从1开始
        local index=$((index+1))
        local separator=$(printf "$SEPARATOR_PATTERN" $index)
        echo "$separator" >> "$OUTPUT_FILE"
        git show -s --format=%B "$sha" >> "$OUTPUT_FILE"
    done

    echo "成功保存 $N 条提交信息到 $OUTPUT_FILE"
}

# 使用示例
git_log_to_file 5 '==== 提交信息%d ====' commit_messages.txt
  1. 调用AI生成合并信息:提问方法可以参考下面的例子。
txt
任务如下:
我需要你按以下要求填写git提交信息,这条提交信息是多条提交信息的合并信息:

合并信息规范如下:
type|type: title(同步)
- type|type(scope|scope): body
- type|type(scope|scope): body

从branch1到branch2的同步

- 同步提交1(最新):commit1_title

- 同步提交2: commit2_title

以下是辅助说明:
title:提交的标题(必填)中文
type:修改部分的类型(必填)
 - feat:新功能
 - fix:Bug 修复
 - docs:文档更新
 - style:代码格式调整(不影响逻辑)
 - refactor:代码重构(既不是新功能也不是 Bug 修复)
 - test:测试相关
 - chore:构建过程或辅助工具的变动
 - perf:性能优化
 - revert:回滚之前的提交
scope:影响的范围(如模块名、文件名)(必填)
body:简短描述(中文)(必填)

以下是所有提交的提交信息:
#复制所有提交记录到这里,如果使用智能体也可以直接引用。
commit_messages.txt