当前位置: 首页 > news >正文

使用Claude代码子代理生成项目特定提交消息的技术实践

使用Claude代码子代理生成项目特定提交消息

在使用Claude Code进行开发时,我经常面临生成的提交消息过于冗长的问题。最近发现新发布的子代理功能可以解决这个问题,因此想分享如何设置。

Claude代码提交消息的问题

当你要求Claude Code在执行功能实现后运行git commit时,它会生成极其冗长的提交消息,例如:

Add describe_tables e2e test and refactor MCP initialization- Add comprehensive e2e test for describe_tables tool
- Refactor MCP server initialization into reusable functions- setupMCPServer: Starts the server process- initializeMCPServer: Handles the MCP protocol handshake
- Ensure both list_tables and describe_tables have complete e2e coverage:robot: Generated with [Claude Code](https://claude.ai/code)Co-Authored-By: Claude <noreply@anthropic.com>

Claude Code生成的提交消息存在几个问题:

  • 在项目符号中包含过多的实现细节
  • 反映会话中的对话上下文
  • 不考虑项目偏好的简单消息风格

在更糟的情况下,它们甚至包括试错过程,如"最初尝试了这种方法,但出现错误,因此放弃并最终做了这个替代方案"。这是因为会话的对话上下文影响了消息生成。

使用子代理解决问题

Claude Code的子代理功能允许你将特定任务委托给具有独立上下文的独立代理。我认为这可以将提交消息生成与会话上下文隔离开来,并创建符合项目约定的消息。

首先,我使用/agents命令生成子代理配置文件,然后进行一些调整创建以下设置。这个子代理的功能包括:

  • 分析git添加文件中的详细更改
  • 研究项目的提交历史以学习消息模式
  • 生成符合项目约定的提交消息
  • 将生成的消息提议给父会话

完整的.claude/agents/git-commit-message-generator.md内容:

你是专门用于生成git提交消息的代理!:sparkles:你负责为暂存文件创建符合项目约定的适当提交消息。## 工作流程### 1. 检查项目提交规则- 如果找到,优先遵循这些规则### 2. 分析暂存文件
- 运行`git diff --cached`检查暂存文件中的详细更改
- 识别更改性质(新功能、错误修复、重构、文档更新等)
- 评估更改的范围和重要性### 3. 分析项目提交历史
- 运行`git log --oneline -10`检查最近提交消息格式
- 特别注意以下方面:- 语言(日语、英语或其他)- 消息结构(单行vs多行格式)- 前缀使用(feat:、fix:、docs:等)- 写作风格和语气模式- 字符数趋势- 其他显著模式### 4. 生成并提议提交消息
- 基于以上分析,生成完美匹配项目约定的提交消息
- 消息应准确简洁地描述更改,便于未来开发人员理解
- 以"请自行运行git commit -m '生成的消息'"结束## 重要说明- **不要执行git commit** - 仅提议消息,将实际提交留给父会话
- 尊重现有项目模式并保持一致性
- 对于复杂更改,适当总结同时不遗漏重要信息
- 如果有任何不清楚的地方,请要求澄清## 错误处理- 如果没有文件暂存,报告此情况
- 如果不在git仓库中或发生git相关错误,适当报告
- 如果无法确定项目约定,遵循一般最佳实践并解释你的目标是提供项目优化的消息,让开发人员可以自信地提交!祝你好运!:flexed_biceps:

一个重要的设计选择是不让子代理自己执行提交。原因是如果子代理直接提交,当你想要调整消息时无法调整。相反,我让它以"请自行运行git commit -m '生成的消息'"结束,因此父会话执行git commit。这样如果对消息不满意,可以进行调整。

实际使用结果

使用很简单 - 在执行git add后只需说"创建提交消息"。Claude Code将自动启动子代理。如果没有自动启动,可以明确说"使用子代理创建提交消息"。

让我们看一个实际会话日志。在开发slack-explorer-mcp时,我正在实现向响应添加工作区URL的功能。当我随后要求提交消息时,它生成了一个简单的消息:

Add workspace URL to search_messages response

我包含下面的会话日志。你可以看到子代理如何正确分析并生成符合项目约定的消息,以及父会话如何执行git commit。

完整会话日志:

> git add completed, subagent commit:record_button: git-commit-message-generator(任务:生成提交消息(使用git-commit-message-generator代理)提示:请分析暂存更改并生成符合项目约定的适当提交消息。)⎿ 代理响应:CLAUDE.md中没有特殊提交消息规则。让我分析最近提交历史模式!项目提交消息模式分析 :bar_chart:1. 语言:英语2. 结构:简单单行格式3. 前缀:未使用(无feat:、fix:等)4. 风格:以动词开头的命令式语气(Add、Update、Implement、Refactor等)5. 字符数:约50-70个字符更改分析 :magnifying_glass_tilted_left:查看暂存更改:handler.go:- 向SearchMessagesResponse结构添加WorkspaceURL字段- 当消息存在时,从第一条消息永久链接添加工作区URL提取handler_test.go:- 更新现有测试以断言响应中包含workspace_url- 添加未找到消息的测试用例(workspace_url应为空字符串)这是向search_messages响应添加工作区URL返回功能!提议的提交消息 :sparkles:遵循现有项目模式,我提议此提交消息:Add workspace URL to search_messages response选择此消息的原因:- 以命令式动词"Add"开头,匹配模式- 准确简洁地描述更改- 51个字符,适当长度- 无前缀,匹配项目风格请自行运行git commit -m "Add workspace URL to search_messages response"!⎿ 完成(4个工具使用·20.2k令牌·27.2秒):record_button: Bash(git commit -m "Add workspace URL to search_messages response")⎿ [return-workspace-url b5e9f4c] Add workspace URL to search_messages response2个文件更改,66个插入(+),1个删除(-):record_button: 提交完成!:party_popper:

结论

使用Claude Code的子代理功能成功解决了冗长提交消息的问题。自从引入此设置后,我很少需要手动编辑提交消息。如果你在Claude Code开发中遇到类似问题,我推荐尝试这种方法。
更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)
公众号二维码

http://www.hskmm.com/?act=detail&tid=15059

相关文章:

  • 走迷宫(BFS)
  • MyBatis分页的原理和分页插件的原理是什么
  • 达成度报告
  • 旋转图像-leetcode
  • 【ChipIntelli 系列】ASR部分——合成语言模型和多网络(多语种)切换
  • 内网环境怎么安装软件(用 yum / apt 下载离线包并搬入内网)
  • tanh函数
  • P13617 [ICPC 2024 APC] Bit Counting Sequence
  • 打一局吗(60pts 解法)
  • 软工9.23
  • 本地部署qwen-0.6b
  • 25分钟小练习
  • 第七章 手写数字识别V2
  • 常用软件下载
  • 实用指南:S 4.1深度学习--自然语言处理NLP--理论
  • PyTorch图神经网络(五)
  • java
  • Jordan块新解
  • [CSP-S 2024] 染色
  • Kerberos 安装和使用
  • 第一次个人编程任务
  • 概率期望总结
  • redis实现秒杀下单的业务逻辑
  • 关于边缘网络+数据库(1)边缘网络数据库模式及选型
  • 题解:B4357 [GESP202506 二级] 幂和数
  • 2025年9月23日 - 20243867孙堃2405
  • 2025.9.23
  • 软件工程学习日志2025.9.23
  • markdown 使用指南