摘要:env.example .env" # 复制环境配置
post-start - worktree 创建后在后台执行,不阻塞切换: [post-start] build = "npm run build" # 构建项目 server = "npm run dev" # 启动开发服务器
日志输出到 .git/wt-logs/{branch}-{source}-post-start-{name}.log post-switch - 每次 wt switch 后在后台执行(无论是新建、切换还是切到当前): post-switch = "echo 'Switched to {{ branch }}'"
pre-commit - merge 时提交前执行,失败即停: [pre-commit] format = "cargo fmt -- --check" # 代码格式检查 lint = "cargo clippy -- -D warnings" # Lint 检查
pre-merge -: Implement JWT authentication system
本文地址:blog.cosine.ren/post/git-wo…
最近用 Claude Code 写代码的频率越来越高,有时候会同时开三四个任务:一个在修 bug,一个在加新功能,一个在 review 中,还有一个在跑测试验证新点子。问题来了:它们都需要独立的工作目录,不然会互相串代码。
Git 的 worktree 功能本来就是为这种场景设计的,但原生命令实在有些啰嗦。传统创建一个新 worktree 要这样:
worktree
git worktree add -b feature-auth ../myproject-feature-auth cd ../myproject-feature-auth
删掉它又得回到主目录:
cd ../myproject git worktree remove ../myproject-feature-auth git branch -d feature-auth
分支名要输三次,每次都要手动 cd。干这事儿多了,会觉得有些浪费生命,这也是我之前为什么不喜欢 worktree。
cd
直到发现 Worktrunk,才发现 worktree 管理原来可以这么优雅(当然还有很多别的工具)。
x.com/max_sixty/s…
用下来感觉非常好,写一篇博客卖一卖安利。
简单来说,Worktrunk 是一个 Git Worktree 的 CLI 包装工具,专门为并行运行多个 AI Agent 的场景优化。它的核心理念是:
每个 worktree 对应一个分支,用分支名管理 worktree,路径自动生成。
对比一下命令差异就能感受到差异:
wt switch feat
cd ../repo.feat
wt switch -c -x claude feat
git worktree add -b feat ../repo.feat && cd ../repo.feat && claude
wt remove
cd ../repo && git worktree remove ../repo.feat && git branch -d feat
wt list
git worktree list
基本就是把 git worktree 的操作复杂度从「记三个参数」降到「说个分支名」。
git worktree
如果你只是偶尔用一下 worktree,原生命令当然就行了。但当你需要频繁并行开发(比如同时跑多个 AI Agent)或者需要自动化流程(创建 worktree 后自动装依赖、跑测试)的时候,Worktrunk 能省下不少时间和心智负担。它本质上是把「用 worktree 的正确姿势」固化成了工具。
macOS/Linux (推荐 Homebrew):
brew install max-sixty/worktrunk/wt
或者用 Cargo:
cargo install worktrunk
装完之后必须跑这一步,否则 wt switch 无法切换目录:
wt switch
wt config shell install
它会在你的 .zshrc 或 .bashrc 里加一段函数,让 wt 命令可以改变当前 shell 的工作目录。
.zshrc
.bashrc
wt
装完重启终端,跑 wt --version 确认安装成功。
wt --version
wt switch | Worktrunk
这是最常用的命令,用法极简:
# 切换到已存在的 worktree (分支名 feat) wt switch feat # 基于主分支 main 创建新 worktree + 分支 feat wt switch -c feat # 创建 worktree + 自动启动 Claude Code wt switch -c feat -x claude # 基于 dev 分支创建新 worktree + 分支 feat-new (而不是 main) + 自动启动 claude wt switch -c feat-new -b dev -x claude
路径规则: Worktrunk 会自动在主仓库的同级目录下创建 worktree,命名格式是 <repo>.<branch>。比如主仓库在 ~/code/myproject,分支 feat 的 worktree 就在 ~/code/myproject.feat。
<repo>.<branch>
~/code/myproject
feat
~/code/myproject.feat
参数说明:
-c
--create
-x <cmd>
claude
code
npm install
-b <base>
main
^
@
-
cd -
wt switch - # Back to previous wt switch ^ # Default branch worktree wt switch --create fix --base=@ # Branch from current HEAD
假设你在跑三个并行任务:
# Terminal 1: 修复认证 bug wt switch -c -x claude fix-auth # Terminal 2: 重构 API wt switch -c -x claude refactor-api # Terminal 3: 加新功能 wt switch -c -x claude feat-dashboard
每个 Claude 实例跑在独立目录里,互不干扰。
wt list | Worktrunk
输出大概长这样:
wt list Branch Status HEAD± main↕ Remote⇅ Commit Age Message @ feature-api + ↕⇡ +54 -5 ↑4 ↓1 ⇡3 ec97decc 30m Add API tests ^ main ^⇅ ⇡1 ⇣1 6088adb3 4d Merge fix-auth: hardened to… + fix-auth ↕| ↑2 ↓1 | 127407de 5h Add secure token storage ○ Showing 3 worktrees, 1 with changes, 2 ahead, 1 column hidden
比原生 git worktree list 强很多,可以看到很多信息
对于管理多个 worktree 来说,这个视图非常实用。
wt remove | Worktrunk
# 删除当前 worktree + 分支 wt remove # 删除指定 worktree wt remove feature-branch wt remove old-feature another-branch # 删除 worktree 但保留分支 wt remove --no-delete-branch feature-branch # 强制删除未合并的分支 wt remove -D experimental
wt merge
wt merge | Worktrunk
这个命令封装了「合并 → 清理」的完整流程:
# 把当前 worktree 合并到默认分支 如 main wt merge # 把当前 worktree 合并到 dev 分支 wt merge dev # 合并后保留工作树 wt merge --no-remove # 保留提交历史(不合并) wt merge --no-squash # 跳过提交/合并(除非使用 --no-rebase 参数,否则 rebase 仍会运行) wt merge --no-commit
如果配置了 pre-merge hook,会在合并前自动跑测试或 lint。
wt select
wt select | Worktrunk
如果你记不清 worktree 名字,可以用 select 命令:
select
会弹出一个 fzf 风格的界面,用方向键选择要切换的 worktree。
wt hook | Worktrunk
Worktrunk 支持在 worktree 生命周期的不同阶段执行命令,同时支持全局用户 hook 配置(~/.config/worktrunk/config.toml )和项目 hook 配置( .config/wt.toml) 好的,我只给你补充 Hook 系统这一段内容:
~/.config/worktrunk/config.toml
.config/wt.toml
post-create
post-start
post-switch
pre-commit
pre-merge
post-merge
pre-remove
阻塞模式: 命令执行完成前,主流程会等待 失败即停: 第一个失败的命令会中止整个操作
post-create - worktree 创建后立即执行,会阻塞直到完成:
[post-create] install = "npm ci" # 安装依赖 migrate = "npm run db:migrate" # 数据库迁移 env = "cp .env.example .env" # 复制环境配置
post-start - worktree 创建后在后台执行,不阻塞切换:
[post-start] build = "npm run build" # 构建项目 server = "npm run dev" # 启动开发服务器
日志输出到 .git/wt-logs/{branch}-{source}-post-start-{name}.log
.git/wt-logs/{branch}-{source}-post-start-{name}.log
post-switch - 每次 wt switch 后在后台执行(无论是新建、切换还是切到当前):
post-switch = "echo 'Switched to {{ branch }}'"
pre-commit - merge 时提交前执行,失败即停:
[pre-commit] format = "cargo fmt -- --check" # 代码格式检查 lint = "cargo clippy -- -D warnings" # Lint 检查
pre-merge - 合并到目标分支前执行,失败即停:
[pre-merge] test = "cargo test" # 运行测试 build = "cargo build --release" # 生产构建
post-merge - 合并成功后在目标分支的 worktree 执行(如果存在),否则在主 worktree 执行:
post-merge = "cargo install --path ."
pre-remove - worktree 删除前执行,失败即停:
[pre-remove] cleanup = "rm -rf /tmp/cache/{{ branch }}"
Hook 命令支持模板变量,运行时自动展开:
{{ repo }}
{{ branch }}
{{ worktree }}
{{ worktree_name }}
{{ repo_root }}
{{ default_branch }}
{{ commit }}
{{ short_commit }}
{{ remote }}
{{ remote_url }}
{{ upstream }}
{{ target }}
项目 hook(.config/wt.toml)首次运行需要用户批准:
▲ repo needs approval to execute 3 commands: ○ post-create install: echo 'Installing dependencies...' ❯ Allow and remember? [y/N]
--yes
--no-verify
管理批准记录:
wt hook approvals add # 预批准当前项目所有命令 wt hook approvals clear # 清除当前项目批准 wt hook approvals clear --global # 清除全局批准
在 ~/.config/worktrunk/config.toml 中配置的 hook 会对所有仓库生效,且不需要批准:
我觉得看下来,这个 hook 非常重要,可以复用主 worktree 的缓存:
[post-create] # 软链接 node_modules 避免重复安装 cache = "ln -sf {{ repo_root }}/node_modules node_modules" env = "cp {{ repo_root }}/.env.local .env"
除了自动触发,也可以手动运行 hook 进行测试或重试:
wt hook pre-merge # 运行 pre-merge hooks wt hook pre-merge --yes # 跳过批准提示(适用于 CI) wt hook show # 查看所有已配置的 hooks
适用场景: Hook 开发测试、CI 流水线、失败后重试等。
claude plugin marketplace add max-sixty/worktrunk claude plugin install worktrunk@worktrunk
除了自动追踪 Claude 状态,你也可以手动给 worktree 设置任何标记,用于其他工作流:
# 给当前分支设置标记 wt config state marker set "🚧" # 给指定分支设置标记 wt config state marker set "✅" --branch feature # 直接操作 Git Config (高级用法) git config worktrunk.state.feature.marker '{"marker":"💬","set_at":0}'
wt list statusline --claude-code 可以输出一行紧凑的状态信息,用于 Claude Code 的状态栏显示:
wt list statusline --claude-code
~/w/myproject.feature-auth !🤖 @+42 -8 ↑3 ⇡1 ● | Opus
LLM Commit Messages | Worktrunk
Worktrunk 可以调用 LLM 自动生成 commit message,集成在 wt merge、wt step commit、wt step squash 等命令中。
wt step commit
wt step squash
不配置也能用,默认会基于文件名生成简单的 message,但配置 LLM 后能生成更有意义的提交信息。
1. 安装 llm 工具
使用的是 llm:
uv tool install -U llm # 或者直接 brew brew install llm
2. 配置 API Key
选择你喜欢的 LLM 提供商:
# 使用 Claude (推荐) llm install llm-anthropic llm keys set anthropic # 输入你的 Anthropic API Key # 或者使用 OpenAI llm keys set openai # 输入你的 OpenAI API Key
3. 配置 Worktrunk
创建配置文件(如果还没有):
wt config create
编辑 ~/.config/worktrunk/config.toml,添加:
[commit-generation] command = "llm" args = ["-m", "claude-3-5-haiku-latest"] # 或 gpt-4o-mini
配置完成后,以下命令会自动生成 commit message:
场景 1: 合并分支时生成 squash commit
$ wt merge ◎ Squashing 3 commits into a single commit (5 files, +48)... ◎ Generating squash commit message... feat(auth): Implement JWT authentication system - Add JWT token generation and validation - Implement refresh token mechanism - Add middleware for protected routes
场景 2: 提交当前变更
$ wt step commit ◎ Generating commit message... fix(api): Handle null response in user endpoint
场景 3: 把多个 commit 压缩成一个
$ wt step squash ◎ Squashing 5 commits... ◎ Generating squash commit message... refactor(ui): Modernize component architecture
除了 llm,任何能从 stdin 读取提示词并输出文本的工具都行:
llm
# 使用 aichat [commit-generation] command = "aichat" args = ["-m", "claude:claude-3-5-haiku-latest"] # 使用自定义脚本 [commit-generation] command = "./scripts/generate-commit.sh"
如果没配置 LLM,Worktrunk 会生成基于文件名的简单 message:
Changes to auth.rs & config.rs
如果你用 GitHub Actions,Worktrunk 可以在 wt list 里显示构建状态:
# 配置 GitHub Token wt config github.token "ghp_xxxxxxxxxxxx" # 之后 wt list 就会显示 CI 状态 wt list
假设你在用 Zellij 或 Tmux 管理多个终端窗口:
# Pane 1: 修 bug wt switch -c -x claude fix-login-bug # Pane 2: 重构 wt switch -c -x claude refactor-utils # Pane 3: 新功能 wt switch -c -x claude feat-export
每个 Claude 在独立目录里工作,你可以随时切回主目录看全局状态:
wt switch main wt list
有时候你想快速验证一个想法,但不想污染当前分支:
# 创建临时 worktree wt switch -c -x code experiment # 验证完毕,直接删掉 wt remove
因为 worktree 是独立目录,删掉不会影响其他分支。
有 PR 来了,你想在本地跑一下代码:
# 基于 PR 分支创建 worktree wt switch -c review-pr-123 -b origin/pr-123 # 装依赖、跑测试 npm install npm run test # Review 完毕,清理 wt remove
post-start - worktree 创建后在后台执行,不阻塞切换: [post-start] build = "npm run build" # 构建项目 server = "npm run dev" # 启动开发服务器
日志输出到 .git/wt-logs/{branch}-{source}-post-start-{name}.log post-switch - 每次 wt switch 后在后台执行(无论是新建、切换还是切到当前): post-switch = "echo 'Switched to {{ branch }}'"
pre-commit - merge 时提交前执行,失败即停: [pre-commit] format = "cargo fmt -- --check" # 代码格式检查 lint = "cargo clippy -- -D warnings" # Lint 检查
pre-merge -: Implement JWT authentication system
写在前面
最近用 Claude Code 写代码的频率越来越高,有时候会同时开三四个任务:一个在修 bug,一个在加新功能,一个在 review 中,还有一个在跑测试验证新点子。问题来了:它们都需要独立的工作目录,不然会互相串代码。
Git 的
worktree功能本来就是为这种场景设计的,但原生命令实在有些啰嗦。传统创建一个新 worktree 要这样:git worktree add -b feature-auth ../myproject-feature-auth cd ../myproject-feature-auth删掉它又得回到主目录:
cd ../myproject git worktree remove ../myproject-feature-auth git branch -d feature-auth分支名要输三次,每次都要手动
cd。干这事儿多了,会觉得有些浪费生命,这也是我之前为什么不喜欢 worktree。直到发现 Worktrunk,才发现 worktree 管理原来可以这么优雅(当然还有很多别的工具)。
x.com/max_sixty/s…
用下来感觉非常好,写一篇博客卖一卖安利。
Worktrunk 是什么
简单来说,Worktrunk 是一个 Git Worktree 的 CLI 包装工具,专门为并行运行多个 AI Agent 的场景优化。它的核心理念是:
对比一下命令差异就能感受到差异:
wt switch featcd ../repo.featwt switch -c -x claude featgit worktree add -b feat ../repo.feat && cd ../repo.feat && claudewt removecd ../repo && git worktree remove ../repo.feat && git branch -d featwt listgit worktree list(只显示路径)基本就是把
git worktree的操作复杂度从「记三个参数」降到「说个分支名」。为什么需要 Worktrunk?
如果你只是偶尔用一下 worktree,原生命令当然就行了。但当你需要频繁并行开发(比如同时跑多个 AI Agent)或者需要自动化流程(创建 worktree 后自动装依赖、跑测试)的时候,Worktrunk 能省下不少时间和心智负担。它本质上是把「用 worktree 的正确姿势」固化成了工具。
安装与配置
安装
macOS/Linux (推荐 Homebrew):
或者用 Cargo:
Shell 集成
装完之后必须跑这一步,否则
wt switch无法切换目录:它会在你的
.zshrc或.bashrc里加一段函数,让wt命令可以改变当前 shell 的工作目录。装完重启终端,跑
wt --version确认安装成功。核心命令详解
wt switch- 切换/创建 Worktreewt switch | Worktrunk
这是最常用的命令,用法极简:
# 切换到已存在的 worktree (分支名 feat) wt switch feat # 基于主分支 main 创建新 worktree + 分支 feat wt switch -c feat # 创建 worktree + 自动启动 Claude Code wt switch -c feat -x claude # 基于 dev 分支创建新 worktree + 分支 feat-new (而不是 main) + 自动启动 claude wt switch -c feat-new -b dev -x claude路径规则: Worktrunk 会自动在主仓库的同级目录下创建 worktree,命名格式是
<repo>.<branch>。比如主仓库在~/code/myproject,分支feat的 worktree 就在~/code/myproject.feat。参数说明:
-c/--create:创建新 worktree + 分支-x <cmd>:切换后自动执行命令 (比如claude,code,npm install)-b <base>:指定基础分支 (默认是main)^@-cd -)wt switch - # Back to previous wt switch ^ # Default branch worktree wt switch --create fix --base=@ # Branch from current HEAD实战场景
假设你在跑三个并行任务:
# Terminal 1: 修复认证 bug wt switch -c -x claude fix-auth # Terminal 2: 重构 API wt switch -c -x claude refactor-api # Terminal 3: 加新功能 wt switch -c -x claude feat-dashboard每个 Claude 实例跑在独立目录里,互不干扰。
wt list- 查看所有 Worktreewt list | Worktrunk
输出大概长这样:
比原生
git worktree list强很多,可以看到很多信息对于管理多个 worktree 来说,这个视图非常实用。
wt remove- 清理 Worktreewt remove | Worktrunk
# 删除当前 worktree + 分支 wt remove # 删除指定 worktree wt remove feature-branch wt remove old-feature another-branch # 删除 worktree 但保留分支 wt remove --no-delete-branch feature-branch # 强制删除未合并的分支 wt remove -D experimentalwt merge- 合并工作流wt merge | Worktrunk
这个命令封装了「合并 → 清理」的完整流程:
# 把当前 worktree 合并到默认分支 如 main wt merge # 把当前 worktree 合并到 dev 分支 wt merge dev # 合并后保留工作树 wt merge --no-remove # 保留提交历史(不合并) wt merge --no-squash # 跳过提交/合并(除非使用 --no-rebase 参数,否则 rebase 仍会运行) wt merge --no-commit如果配置了 pre-merge hook,会在合并前自动跑测试或 lint。
wt select- 交互式选择器wt select | Worktrunk
如果你记不清 worktree 名字,可以用
select命令:会弹出一个 fzf 风格的界面,用方向键选择要切换的 worktree。
Hooks
wt hook | Worktrunk
Worktrunk 支持在 worktree 生命周期的不同阶段执行命令,同时支持全局用户 hook 配置(
~/.config/worktrunk/config.toml)和项目 hook 配置(.config/wt.toml) 好的,我只给你补充 Hook 系统这一段内容:Hook 类型一览
post-createpost-startpost-switchpre-commitpre-mergepost-mergepre-remove阻塞模式: 命令执行完成前,主流程会等待
失败即停: 第一个失败的命令会中止整个操作
核心 Hooks 说明
post-create - worktree 创建后立即执行,会阻塞直到完成:
[post-create] install = "npm ci" # 安装依赖 migrate = "npm run db:migrate" # 数据库迁移 env = "cp .env.example .env" # 复制环境配置post-start - worktree 创建后在后台执行,不阻塞切换:
[post-start] build = "npm run build" # 构建项目 server = "npm run dev" # 启动开发服务器日志输出到
.git/wt-logs/{branch}-{source}-post-start-{name}.logpost-switch - 每次
wt switch后在后台执行(无论是新建、切换还是切到当前):post-switch = "echo 'Switched to {{ branch }}'"pre-commit - merge 时提交前执行,失败即停:
[pre-commit] format = "cargo fmt -- --check" # 代码格式检查 lint = "cargo clippy -- -D warnings" # Lint 检查pre-merge - 合并到目标分支前执行,失败即停:
[pre-merge] test = "cargo test" # 运行测试 build = "cargo build --release" # 生产构建post-merge - 合并成功后在目标分支的 worktree 执行(如果存在),否则在主 worktree 执行:
post-merge = "cargo install --path ."pre-remove - worktree 删除前执行,失败即停:
[pre-remove] cleanup = "rm -rf /tmp/cache/{{ branch }}"模板变量
Hook 命令支持模板变量,运行时自动展开:
{{ repo }}{{ branch }}{{ worktree }}{{ worktree_name }}{{ repo_root }}{{ default_branch }}{{ commit }}{{ short_commit }}{{ remote }}{{ remote_url }}{{ upstream }}{{ target }}安全机制
项目 hook(
.config/wt.toml)首次运行需要用户批准:--yes跳过提示(适用于 CI)--no-verify完全跳过 hooks管理批准记录:
wt hook approvals add # 预批准当前项目所有命令 wt hook approvals clear # 清除当前项目批准 wt hook approvals clear --global # 清除全局批准用户级 Hooks
在
~/.config/worktrunk/config.toml中配置的 hook 会对所有仓库生效,且不需要批准:.config/wt.toml~/.config/worktrunk/config.toml我觉得看下来,这个 hook 非常重要,可以复用主 worktree 的缓存:
[post-create] # 软链接 node_modules 避免重复安装 cache = "ln -sf {{ repo_root }}/node_modules node_modules" env = "cp {{ repo_root }}/.env.local .env"独立运行 Hooks
除了自动触发,也可以手动运行 hook 进行测试或重试:
wt hook pre-merge # 运行 pre-merge hooks wt hook pre-merge --yes # 跳过批准提示(适用于 CI) wt hook show # 查看所有已配置的 hooks适用场景: Hook 开发测试、CI 流水线、失败后重试等。
Claude Code 插件监测状态
手动设置状态标记
除了自动追踪 Claude 状态,你也可以手动给 worktree 设置任何标记,用于其他工作流:
# 给当前分支设置标记 wt config state marker set "🚧" # 给指定分支设置标记 wt config state marker set "✅" --branch feature # 直接操作 Git Config (高级用法) git config worktrunk.state.feature.marker '{"marker":"💬","set_at":0}'Statusline 状态栏
wt list statusline --claude-code可以输出一行紧凑的状态信息,用于 Claude Code 的状态栏显示:LLM Commit Messages 自动生成提交信息
LLM Commit Messages | Worktrunk
Worktrunk 可以调用 LLM 自动生成 commit message,集成在
wt merge、wt step commit、wt step squash等命令中。不配置也能用,默认会基于文件名生成简单的 message,但配置 LLM 后能生成更有意义的提交信息。
安装与配置
1. 安装 llm 工具
使用的是 llm:
uv tool install -U llm # 或者直接 brew brew install llm2. 配置 API Key
选择你喜欢的 LLM 提供商:
# 使用 Claude (推荐) llm install llm-anthropic llm keys set anthropic # 输入你的 Anthropic API Key # 或者使用 OpenAI llm keys set openai # 输入你的 OpenAI API Key3. 配置 Worktrunk
创建配置文件(如果还没有):
编辑
~/.config/worktrunk/config.toml,添加:[commit-generation] command = "llm" args = ["-m", "claude-3-5-haiku-latest"] # 或 gpt-4o-mini使用场景
配置完成后,以下命令会自动生成 commit message:
场景 1: 合并分支时生成 squash commit
$ wt merge ◎ Squashing 3 commits into a single commit (5 files, +48)... ◎ Generating squash commit message... feat(auth): Implement JWT authentication system - Add JWT token generation and validation - Implement refresh token mechanism - Add middleware for protected routes场景 2: 提交当前变更
$ wt step commit ◎ Generating commit message... fix(api): Handle null response in user endpoint场景 3: 把多个 commit 压缩成一个
使用其他 AI 工具
除了
llm,任何能从 stdin 读取提示词并输出文本的工具都行:# 使用 aichat [commit-generation] command = "aichat" args = ["-m", "claude:claude-3-5-haiku-latest"] # 使用自定义脚本 [commit-generation] command = "./scripts/generate-commit.sh"Fallback 行为
如果没配置 LLM,Worktrunk 会生成基于文件名的简单 message:
CI 状态集成
如果你用 GitHub Actions,Worktrunk 可以在
wt list里显示构建状态:# 配置 GitHub Token wt config github.token "ghp_xxxxxxxxxxxx" # 之后 wt list 就会显示 CI 状态 wt list实战工作流
并行跑多个 Claude Code
假设你在用 Zellij 或 Tmux 管理多个终端窗口:
# Pane 1: 修 bug wt switch -c -x claude fix-login-bug # Pane 2: 重构 wt switch -c -x claude refactor-utils # Pane 3: 新功能 wt switch -c -x claude feat-export每个 Claude 在独立目录里工作,你可以随时切回主目录看全局状态:
临时验证想法
有时候你想快速验证一个想法,但不想污染当前分支:
# 创建临时 worktree wt switch -c -x code experiment # 验证完毕,直接删掉 wt remove因为 worktree 是独立目录,删掉不会影响其他分支。
Review PR 时跑代码
有 PR 来了,你想在本地跑一下代码:
# 基于 PR 分支创建 worktree wt switch -c review-pr-123 -b origin/pr-123 # 装依赖、跑测试 npm install npm run test # Review 完毕,清理 wt remove参考资料