Claude Code Worktree
- # ai
- # claude-code
- # git
- # worktree
这篇文章是读了 sorrycc 的 Claude Code Worktree 之后,顺手整理的一点使用笔记。
Claude 的 worktree 本质上其实就是 Git worktree。
默认创建路径 .claude/worktrees/
# 创建一个名为 `project-task` 的 worktree。
claude -w project-task
# 不指定名字时,让 Claude 自动创建一个 worktree
claude -w
# 查看当前仓库挂了哪些 worktree
git worktree list
# Claude 退出会询问是否删除 worktree。如果没有进行任何改动,会自动删除 worktree。
# 也可以手动删除
git worktree remove project-task
搭配 git branch 使用
一般不需要先手动创建分支。直接让 Claude 创建 worktree 就可以,它会为这个 worktree 准备对应的分支。
如果已经有一个现成分支,也可以让 worktree 基于这个分支继续工作。但多数临时任务里,更自然的顺序是:先创建 worktree,让它带出一个任务分支,然后在这个分支里让 Claude 修改代码。
合并时的顺序是反过来的:先确认 worktree 里的改动已经提交,再回到主工作区,把这个任务分支合回主分支。不要在还没看 diff、没跑验证的时候急着合并。
删除时也有顺序:先删除 worktree,再删除对应分支。因为分支还被 worktree 占用时,Git 不允许直接删除这个分支。
worktree 默认不会复制部分文件
如:
.env.env.local- 其他没有被 Git 跟踪的文件
worktree checkout 的是 Git 管理的内容。没有提交、没有被跟踪,或者被 .gitignore 忽略的文件,不会自动出现在新的 worktree 里。
如果希望 Claude 创建 worktree 时顺便带上某些本地文件,可以在项目根目录创建 .worktreeinclude。
比如:
.env
.env.local
这样这些文件会被复制到 Claude 新建的 worktree 里,避免每次进去都要手动补环境文件。
重复的 node_modules
node_modules 是在 gitignore 里的,默认不会被复制到 worktree 里。
每个 worktree 都是一个独立目录,所以如果在每个 worktree 里都安装依赖,就会各自生成一份 node_modules,很快占用大量磁盘空间。
可以在 Claude 配置里让这些目录使用 symlink:
{
"worktree": {
"symlinkDirectories": ["node_modules"]
}
}
这样新 worktree 里不会再复制一整份 node_modules,而是链接到原目录。node_modules这类体积大、可再生成、通常不需要进入 Git 的目录,比较适合用这种方式处理。