Git 集成
wescode 深度整合 Git 版本控制,结合 AI Agent 引擎和 CKG(代码知识图谱)提供智能化的 Git 工作流辅助,包括 AI 生成 Commit 消息、分支管理、冲突解决、PR 辅助和代码历史分析。
AI Commit
智能 Commit 消息生成
wescode 分析 staged 变更,自动生成符合 Conventional Commits 规范的提交消息:
在 Chat 面板中:
> 帮我生成 commit message
或使用快捷键:
Ctrl+Shift+G → AI Commit
AI 会分析以下信息来生成消息:
- Diff 内容:逐文件分析新增、修改、删除的代码
- CKG 上下文:理解变更涉及的模块、函数和依赖关系
- 项目惯例:学习仓库历史 Commit 风格(前缀、语言、长度)
Commit 消息格式
feat(auth): 添加 JWT token 刷新机制
- 新增 RefreshToken 中间件
- 支持 token 过期前自动续期
- 刷新失败时返回 401 引导重新登录
Refs: #234
批量 Commit
对于大量变更,AI 可以建议拆分为多个语义清晰的提交:
> 这次改动涉及三个功能,帮我拆分 commit
AI 建议:
1. refactor(db): 抽取数据库连接池配置
2. feat(cache): 添加 Redis 缓存层
3. test(cache): 补充缓存命中率测试
配置选项
在 config.yaml 中自定义 Commit 风格:
git:
commit:
language: zh-CN # 提交消息语言
convention: conventional # conventional | angular | custom
max_subject_length: 72
include_body: true # 是否生成详细描述
include_refs: true # 是否包含 issue 引用
分支管理
AI 辅助分支操作
> 基于当前 main 创建功能分支,我要实现用户权限模块
AI 执行:
git checkout main
git pull origin main
git checkout -b feat/user-permission
分支命名建议
AI 根据任务描述自动生成规范的分支名:
| 任务类型 | 建议分支名 |
|---|---|
| 新功能 | feat/user-permission |
| 修复 | fix/login-timeout |
| 重构 | refactor/db-connection-pool |
| 文档 | docs/api-reference |
分支状态分析
> 分析一下我当前分支和 main 的差异
AI 报告:
- 领先 main 12 个提交
- 落后 main 3 个提交(可能存在冲突)
- 涉及 8 个文件,主要在 internal/auth/ 目录
- 建议先 rebase main 再继续开发
Stash 管理
> 我需要临时切到 hotfix 分支,先保存当前工作
AI 执行:
git stash push -m "WIP: 用户权限模块 - 角色分配功能"
> 切回来了,恢复之前的工作
git stash pop
冲突解决
AI 辅助合并冲突
当 git merge 或 git rebase 产生冲突时,wescode 提供智能辅助:
> 帮我解决当前的合并冲突
AI 分析:
发现 3 个文件存在冲突:
1. internal/auth/middleware.go — 函数签名变更冲突
2. internal/config/config.go — 新增配置项冲突
3. go.mod — 依赖版本冲突
正在逐个分析...
冲突理解
AI 结合 CKG 理解冲突双方的意图:
文件: internal/auth/middleware.go
<<<<<<< HEAD (你的修改)
func AuthMiddleware(cfg *Config) gin.HandlerFunc {
=======
func AuthMiddleware(cfg *Config, logger *slog.Logger) gin.HandlerFunc {
>>>>>>> main (目标分支)
AI 分析:
- HEAD:你重构了 Config 结构,将 logger 内嵌到 Config 中
- main:同事给中间件加了显式 logger 参数
- 建议:采用你的方案(Config 内嵌 logger),因为更符合项目约定
同时保留 main 中新增的日志点
冲突预防
AI 可以提前预警潜在冲突:
> 我的分支和 main 有潜在冲突吗?
AI 检查:
⚠️ internal/auth/handler.go
你修改了 LoginHandler 的入参
main 分支上同事也修改了同一函数
建议尽早合并以减少冲突范围
批量冲突处理
当冲突文件较多时,AI 按优先级排序并逐一处理:
> 一次性解决所有冲突
AI 策略:
1. 先解决 go.mod(基础依赖,影响编译)
2. 再解决 config.go(配置层,被其他文件依赖)
3. 最后解决 middleware.go(业务逻辑)
每步解决后自动执行 go build 验证
PR 辅助
自动生成 PR 描述
当你准备提交 Pull Request 时,AI 可以自动生成完整的 PR 描述:
> 帮我生成这个分支的 PR 描述
AI 生成:
## 概述
实现用户权限管理模块,支持基于角色的访问控制(RBAC)。
## 变更内容
- 新增 `internal/auth/rbac.go`:角色定义与权限映射
- 新增 `internal/auth/middleware.go`:权限校验中间件
- 修改 `internal/api/router.go`:为受保护路由添加权限中间件
- 新增 `internal/auth/rbac_test.go`:RBAC 单元测试(覆盖率 92%)
## 影响分析(CKG)
- 影响 12 个 API 端点的访问控制
- 新增 2 个数据库表(roles, user_roles)
- 不影响现有认证流程(向后兼容)
## 测试
- [x] 单元测试通过
- [x] 集成测试通过
- [x] 手动验证管理员/普通用户权限差异
## 关联 Issue
Closes #234
PR 审查建议
AI 在提交 PR 前进行预审查,提前发现问题:
> 审查一下我这个 PR,提交前检查
AI 预审查报告:
✅ 代码风格一致
✅ 测试覆盖率 92%(高于项目要求的 80%)
⚠️ 建议:rbac.go 第 45 行的权限检查可以使用 map 替代 switch
⚠️ 建议:middleware.go 缺少 rate limit 相关的注释
❌ 问题:router.go 中 /admin/users 路由缺少权限中间件
PR 模板适配
AI 能识别项目的 PR 模板并自动填充:
> 按照项目的 PR 模板格式生成
AI 会读取 .github/PULL_REQUEST_TEMPLATE.md
自动填充各个必填字段
变更影响摘要
结合 CKG 分析,AI 为 Reviewer 提供变更影响概览:
本次 PR 的调用图影响:
router.go → middleware.go → rbac.go → db/role_repo.go
↘ cache/role_cache.go
直接影响:5 个文件
间接影响:12 个 API 端点
风险评估:中(涉及权限控制逻辑)
建议 Reviewer 重点关注:rbac.go 中的权限继承逻辑
历史分析
Git 考古
利用 AI 理解代码的演变历史:
> 这个函数为什么是现在这个样子?追溯它的历史
AI 分析 ProcessOrder() 的演变:
1. 2024-03 初始版本:简单的同步处理
2. 2024-06 重构:加入异步队列(PR #89)
3. 2024-09 修复:处理超时取消(Issue #156)
4. 2025-01 优化:批量处理模式(PR #203)
当前形态的关键决策:
- 异步队列是为了支持高并发(当时日订单量突破 10 万)
- 超时取消是因为第三方支付回调偶尔 hang 住
Blame 分析
增强的 git blame 功能,不仅显示谁改了什么,还解释为什么:
> 这行代码为什么设置超时为 30 秒?
AI 通过 blame + commit message + 关联 issue 分析:
该值在 PR #156 中从 60s 改为 30s
原因:Issue #155 报告支付回调超过 30s 的概率为 0.01%
决策:将超时设为 30s 以平衡用户体验和系统资源
修改者:张三(2024-09-15)
变更趋势分析
> 分析最近一个月哪些模块改动最频繁
AI 报告:
1. internal/order/ — 变更 47 次(热点模块)
2. internal/payment/ — 变更 31 次
3. internal/auth/ — 变更 12 次
建议:
- order 模块变更过于频繁,可能需要拆分
- payment 模块的变更集中在 callback 处理,建议重构
Cherry Pick 辅助
> 把 fix/timeout 分支上修复超时的那个提交 cherry-pick 到 release
AI 定位并执行:
找到目标提交:a1b2c3d "fix: 支付回调超时从 60s 调整为 30s"
git cherry-pick a1b2c3d
✅ Cherry-pick 成功,无冲突
工作流集成
常用 Git 工作流
wescode 支持多种 Git 工作流的 AI 辅助:
Git Flow:
> 开始一个新功能开发(Git Flow)
AI 执行:
git flow feature start user-permission
# 开发完成后
git flow feature finish user-permission
GitHub Flow:
> 从 main 开始,走 GitHub Flow
AI 执行:
git checkout -b feat/user-permission
# ... 开发 & 提交 ...
# 准备 PR 时自动生成描述
Trunk-Based:
> 使用 trunk-based 模式提交
AI 建议:
- 变更较小,建议直接提交到 main
- 变更较大,建议创建短生命周期分支(< 1 天)
最佳实践
Commit 规范
- 使用 Conventional Commits 格式
- 每个 Commit 只做一件事
- Subject 不超过 72 个字符
- Body 解释"为什么"而不是"做了什么"
分支卫生
- 定期同步 main 分支到开发分支
- 完成后及时删除已合并的分支
- 使用
--no-ff保留合并历史(可选)
PR 规范
- PR 标题遵循 Commit 格式
- 提供足够的上下文和测试说明
- 控制 PR 大小,建议单个 PR 不超过 400 行变更
- 使用 AI 预审查减少来回修改次数
注意事项
- AI Commit 消息建议人工审核后再提交
- 冲突解决后务必执行编译和测试验证
- PR 描述中的影响分析基于 CKG,首次索引可能不完整
- Git 操作(如 rebase、force push)是不可逆的,AI 会在执行前确认
- 历史分析依赖 Commit 消息质量,如果历史消息不规范,分析可能不够准确
- 所有 Git 数据(索引、记忆)物理隔离于当前 workspace 的 Cell 中