同时并行开发多个功能
本节信息
讲师 Elie Schoppik(Anthropic)· 时长 11:52 · ▶ 原视频
你可以开多个 Claude Code 会话,并行地做很多功能。为了管好这些会话、避免它们改同一个文件造成覆盖,你可以用工作树(Git worktree)。这一节,我们就用工作树并行给聊天机器人加三个功能。
先做一个自定义斜杠命令
前面看到 Claude Code 内置了不少斜杠命令(slash command),但你也能自己造。
做自定义命令,要在 .claude 文件夹里新建一个 commands 文件夹,里面放一个 markdown 文件、文件名就是命令名。我要做的命令叫 implement feature,于是建一个 implement-feature.md。
文件里想写什么都行。有个特别的地方:如果你想给自定义命令传参数,可以用 $ARGUMENTS 这个变量来引用。我这里写的意思是:这个命令一被调用,就表示「你要实现一个新功能」,具体什么功能由用户传进来;同时确保只针对前端功能做,并把改动写进 frontend-changes.md。
注意,这里写的内容不会自动进入你的上下文(这点和 CLAUDE.md 不同)。所以:想让某些东西应用到每一个 Claude Code 实例,写进 CLAUDE.md;只是时用时不用的特定命令,放这里就很合适。
为什么需要工作树
来聊聊怎么并行用 Claude Code。我们不只是开一堆终端窗口、都直接在这个代码库上干——因为如果有两个 Claude Code 实例改同一个文件,就会互相覆盖、制造 bug、一团乱。
好在 Git 有个绝佳的功能叫 worktree(工作树)。工作树能让我本质上创建代码库的多份副本、各自隔离地干活,最后再合并到一起。而且,合并和管理这些工作树,我也能让 Claude 来帮忙。
建三个工作树,三路并行开工
我先建一个文件夹叫 .trees,用 git worktree add 往里加三个工作树:ui_feature、testing_feature、quality_feature,给每个各开一个终端、各开一个 Claude。
下面这个示意,把「建树 → 并行开工 → 各自提交 → 合并 → 解决冲突」整套流程走了一遍:
style.cssapp.jspyproject.tomltests/test_api.pypyproject.toml教学示意:工作树 = 同一仓库的多份隔离副本,并行干活、最后合并。合并冲突也能交给 Claude 处理。
- 第一个工作树:用
implement-feature命令,加一个深色/浅色主题切换的开关。 - 第二个工作树:增强现有测试框架、为 FastAPI 端点补充更多测试。
- 第三个工作树:给开发流程加上一些必要的代码质量工具。
注意:
pyproject.toml这个文件在两个不同的工作树里都被改了,所以待会儿合并时可能会有冲突。
合并:让 Claude 处理冲突
全部做完后,先把这些零散改动各自 add、commit,配上描述性的提交信息——因为我们要合并这些提交,得让每个工作树里做了什么一目了然。
小贴士:如果你发现自己老在写「add 并 commit、配描述性信息」这种提示词,这又是一个适合做自定义命令的场景。
三个都提交完,回到 main 分支。我让 Claude:用 git merge 把 .trees 里所有工作树合并进来,有冲突就修掉。
testing_feature:没有冲突。ui_feature:合并进来。quality_feature:这里有冲突——正是之前那个pyproject.toml。
那就让 Claude Code 分析这些冲突、完成合并。这时候有测试也很值钱:合并完能跑测试,确认代码库如期工作。完事后我可以让它删掉这些工作树,也可以留着备用。
回浏览器确认:现在有了漂亮的主题切换,浅色、深色都在。我已经能横跨整个技术栈做改动,连 linting 和 DevOps 那块也搞定了,全程没有覆盖、没有恼人的麻烦——靠的就是 Git worktree 的威力。
下一节,我们会看看怎么在终端之外用 Claude Code——通过和 GitHub 的集成来评审拉取请求(pull request)、做改动。