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):
- 从develop分支创建并切换临时分支temp_merge
- 把feature压缩合并到temp_merge
- 托管仓库中创建PR,PR把temp_merge合并到develop。
- 删除临时分支temp_merge
- 为了直观,把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生成也只是相当于给个大体的结构,具体的提交信息和一些小细节还是需要自己补上的。
生成提交信息操作示例
- 获取所有变更内容:
git diff HEAD > all_changes.patch
- 调用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。
生成合并信息操作示例
- 获取所有提交信息: 注意,这是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
- 调用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