合并提交
Dish AI Commit Gen 提供强大的合并提交功能,可以将多个相关文件的更改智能地合并为一个提交消息,提高代码提交的可读性和一致性。
功能介绍
合并提交功能能够智能分析多个文件的变更,识别它们之间的关联性,并生成一个统一、全面的提交消息,而不是为每个文件单独生成消息。这对于实现单一功能但修改了多个文件的情况特别有用。通过使用最新的 AI 模型(支持 OpenAI、Ollama、VSCode 内置 AI、智谱 AI 等多种服务),系统可以准确理解代码变更的整体意图,并生成高质量的提交描述。
此外,您还可以选择使用分层提交功能,它会先生成一个全局摘要,然后为每个文件的变更提供详细说明,使提交消息既简洁又全面。
启用合并提交
要启用合并提交功能,在 VS Code 设置中配置:
json
{
"dish-ai-commit.features.commitFormat.enableMergeCommit": true
}
默认情况下,此功能是关闭的,以确保向后兼容性。
对于希望使用分层提交功能的用户,可以额外配置:
json
{
"dish-ai-commit.features.commitFormat.enableLayeredCommit": true
}
这将生成包含全局摘要和每个文件详细变更的结构化提交消息。
工作原理
启用合并提交功能后,系统会:
- 收集变更:获取所有暂存文件的变更信息
- 分析关联性:使用 AI 分析文件间的逻辑关联
- 识别共同目的:确定变更的统一目的或意图
- 生成一致消息:创建一个涵盖所有相关变更的提交消息
自动分组算法
系统采用的自动分组算法包括:
- 路径相似性分析:处于相同或相似目录的文件可能具有相关功能
- 导入关系分析:检查文件之间的导入或引用关系
- 变更内容关联:分析代码变更内容中的相似模式或相关术语
- 功能模块识别:根据文件命名和内容识别属于同一功能模块的文件
使用场景
合并提交功能在以下场景中特别有用:
功能开发
开发新功能时,通常需要修改多个文件:
- 后端 API 实现
- 前端组件开发
- 数据模型定义
- 单元测试编写
启用合并提交后,这些变更将被识别为单一功能实现,生成统一的提交消息,例如:
feat(user): 实现用户注册功能
- 添加用户注册 API
- 创建用户注册表单组件
- 实现用户数据验证
- 添加注册流程单元测试
Bug 修复
修复跨多个文件的 bug 时,系统会将相关修复合并为一个提交:
fix(auth): 修复登录验证失效问题
- 修复 token 验证逻辑
- 更新过期 token 处理流程
- 更正登录表单错误提示
重构
代码重构常常涉及对多个文件的同步修改:
refactor(api): 重构 API 请求处理流程
- 抽取通用请求处理逻辑到单独模块
- 统一错误处理机制
- 优化请求参数验证
细粒度控制
虽然合并提交是自动的,但您仍然可以通过以下方式进行控制:
手动分组提交
如果您希望将某些文件分开提交,可以:
- 只暂存(
git add
)属于同一逻辑组的文件 - 使用 Dish AI Commit Gen 生成提交消息
- 提交这组文件
- 重复以上步骤处理其他文件组
自定义合并提示词
您可以自定义系统提示词,指导 AI 如何进行合并:
json
{
"dish-ai-commit.base.systemPrompt": "对多个文件的变更,请识别它们的共同目的,并生成一个统一的提交消息。请确保在提交正文中总结每个文件的主要变更。"
}
合并提交格式
启用合并提交后,生成的提交消息通常采用以下格式:
<类型>(<可选作用域>): <总体变更描述>
<详细说明,包括主要变更点>
- <文件或组件 1 的变更>
- <文件或组件 2 的变更>
- <文件或组件 3 的变更>
<可选脚注>
例如:
feat(payment): 实现信用卡支付功能
添加了信用卡支付流程,包括卡信息验证、支付处理和交易记录。
- 添加了 PaymentService 类处理支付逻辑
- 创建了信用卡表单组件和验证规则
- 实现了支付结果处理和错误提示
- 添加了支付相关单元测试
Refs: #123
最佳实践
为了充分利用合并提交功能,建议:
- 相关变更一起提交:确保属于同一功能或修复的文件一起暂存和提交
- 避免混合无关变更:不要在同一次提交中混合无关的功能或修复
- 遵循单一责任原则:每次提交应专注于单一目的,即使跨多个文件
- 合理使用作用域:为提交指定清晰的作用域,帮助识别变更的主要模块
- 定期小批量提交:避免积累大量变更后一次性提交,保持合理的提交大小