Skip to content

合并提交

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
}

这将生成包含全局摘要和每个文件详细变更的结构化提交消息。

工作原理

启用合并提交功能后,系统会:

  1. 收集变更:获取所有暂存文件的变更信息
  2. 分析关联性:使用 AI 分析文件间的逻辑关联
  3. 识别共同目的:确定变更的统一目的或意图
  4. 生成一致消息:创建一个涵盖所有相关变更的提交消息

自动分组算法

系统采用的自动分组算法包括:

  • 路径相似性分析:处于相同或相似目录的文件可能具有相关功能
  • 导入关系分析:检查文件之间的导入或引用关系
  • 变更内容关联:分析代码变更内容中的相似模式或相关术语
  • 功能模块识别:根据文件命名和内容识别属于同一功能模块的文件

使用场景

合并提交功能在以下场景中特别有用:

功能开发

开发新功能时,通常需要修改多个文件:

  • 后端 API 实现
  • 前端组件开发
  • 数据模型定义
  • 单元测试编写

启用合并提交后,这些变更将被识别为单一功能实现,生成统一的提交消息,例如:

feat(user): 实现用户注册功能

- 添加用户注册 API
- 创建用户注册表单组件
- 实现用户数据验证
- 添加注册流程单元测试

Bug 修复

修复跨多个文件的 bug 时,系统会将相关修复合并为一个提交:

fix(auth): 修复登录验证失效问题

- 修复 token 验证逻辑
- 更新过期 token 处理流程
- 更正登录表单错误提示

重构

代码重构常常涉及对多个文件的同步修改:

refactor(api): 重构 API 请求处理流程

- 抽取通用请求处理逻辑到单独模块
- 统一错误处理机制
- 优化请求参数验证

细粒度控制

虽然合并提交是自动的,但您仍然可以通过以下方式进行控制:

手动分组提交

如果您希望将某些文件分开提交,可以:

  1. 只暂存(git add)属于同一逻辑组的文件
  2. 使用 Dish AI Commit Gen 生成提交消息
  3. 提交这组文件
  4. 重复以上步骤处理其他文件组

自定义合并提示词

您可以自定义系统提示词,指导 AI 如何进行合并:

json
{
  "dish-ai-commit.base.systemPrompt": "对多个文件的变更,请识别它们的共同目的,并生成一个统一的提交消息。请确保在提交正文中总结每个文件的主要变更。"
}

合并提交格式

启用合并提交后,生成的提交消息通常采用以下格式:

<类型>(<可选作用域>): <总体变更描述>

<详细说明,包括主要变更点>

- <文件或组件 1 的变更>
- <文件或组件 2 的变更>
- <文件或组件 3 的变更>

<可选脚注>

例如:

feat(payment): 实现信用卡支付功能

添加了信用卡支付流程,包括卡信息验证、支付处理和交易记录。

- 添加了 PaymentService 类处理支付逻辑
- 创建了信用卡表单组件和验证规则
- 实现了支付结果处理和错误提示
- 添加了支付相关单元测试

Refs: #123

最佳实践

为了充分利用合并提交功能,建议:

  1. 相关变更一起提交:确保属于同一功能或修复的文件一起暂存和提交
  2. 避免混合无关变更:不要在同一次提交中混合无关的功能或修复
  3. 遵循单一责任原则:每次提交应专注于单一目的,即使跨多个文件
  4. 合理使用作用域:为提交指定清晰的作用域,帮助识别变更的主要模块
  5. 定期小批量提交:避免积累大量变更后一次性提交,保持合理的提交大小

使用 MIT 许可发布