git worktree 速查表:所有命令和示例

所有 git worktree 命令和可直接复制的示例:新分支或已有分支建 worktree、列出、切换、锁定、移动、删除、prune 和 repair。

一句话回答:日常最常用的 5 条命令是 git worktree add -b <分支> <路径>、git worktree add <路径> <已有分支>、git worktree list、git worktree remove <路径> 和 git worktree prune,其余的都在下面。刚接触 worktree?先看 git worktree 实用指南。

创建

要做什么命令
从 main 新建分支git worktree add -b feat/search ../app-search main
从当前 commit 新建分支git worktree add -b feat/search ../app-search
检出本地已有分支git worktree add ../app-login fix/login
只在远端存在的分支git fetch && git worktree add ../app-pr feat/remote-only
把已有分支重置到新的起点git worktree add -B feat/search ../app-search origin/main
不建分支(detached HEAD),只是看看git worktree add --detach ../app-v2 v2.0.0
创建时直接锁定git worktree add --lock --reason "agent" -b feat/x ../app-x

分支只在一个远端存在时,git 会像 git switch 那样新建一个跟踪它的本地分支。用 -b 时,路径写在起点前面;不用时,路径写在分支名前面。

查看

要做什么命令
列出所有 worktreegit worktree list
同时显示被锁定和可清理的,以及原因git worktree list -v
给脚本用的机器可读格式git worktree list --porcelain
不 cd 就看另一个 worktree 的状态git -C ../app-search status --short
某个 worktree 里没 push 的 commitgit -C ../app-search log @{upstream}..HEAD --oneline

切换

没有 git worktree switch 这个命令。每个 worktree 就是一个目录,切换就是换目录:cd ../app-search。在另一个 worktree 里执行 git switch feat/search 会报 fatal: 'feat/search' is already used by worktree at '…',因为一个分支同时只能在一个 worktree 里检出。

维护

要做什么命令
防止被 prune 和 removegit worktree lock --reason "在移动硬盘上" ../app-search
解锁git worktree unlock ../app-search
移动到别的目录git worktree move ../app-search ~/work/app-search
手动移动仓库后修复关联git worktree repair

删除

要做什么命令
删除干净的 worktreegit worktree remove ../app-search
有未提交文件也删(这些文件会丢)git worktree remove --force ../app-search
清理手动删掉的目录的记录git worktree prune -v
预览 prune 会做什么git worktree prune --dry-run -v
之后删除分支git branch -d feat/search

遇到报错?看如何删除 git worktree 以及常见报错。

有用的设置

  • git config worktree.guessRemote true:执行 git worktree add <路径> 不写分支名时,git 会用目录名作为新分支名。开了这个设置后,如果远端有同名分支,就检出它,而不是从 HEAD 新建。
  • git config --global fetch.prune true:每次 fetch 时清掉远端已删除的分支,避免过期的 origin/* 和 worktree 堆在一起。

一个省事的命名习惯

把目录建在主目录旁边,并以分支命名:~/code/app、~/code/app-search、~/code/app-fix-login。这样你总知道哪个目录对应哪个分支,编辑器的最近项目列表也一目了然。

worktree 多起来以后,可以交给 Orchard 来管。它列出你 Mac 上所有项目的所有 worktree,显示每个里面有什么没提交、没 push,哪个 AI agent 在哪里工作,以及哪些已经进了 main。

常见问题

怎么为已有分支创建 git worktree?

运行 git worktree add,后面跟新目录的路径和分支名,比如 git worktree add ../app-login fix/login。这个分支不能已经被别的 worktree 检出。

怎么在 git worktree 之间切换?

直接换目录。每个 worktree 是一个独立目录,检出着自己的分支,所以 cd ../app-search 就到了那个 worktree。没有 git worktree switch 命令。

怎么查看所有 git worktree 和它们的状态?

git worktree list 显示每个目录、commit 和分支,加 -v 还能看到被锁定和可清理的 worktree。它不显示未提交的改动或没 push 的 commit,这些要在每个 worktree 里运行 git status。