Git worktree怎样为多个分支创建并行工作目录
如果你需要同时处理多个分支,直接在同一个目录里反复切换分支,容易把未提交修改带到错误的任务上。Git worktree 的做法是让一个仓库挂出多个工作目录:主工作树继续保留当前分支,其他目录分别关联到 feature/search、fix/login 等分支。
先说结论:进入仓库根目录执行 git worktree add 目标目录 分支名,创建后用 git worktree list 核对路径和分支;任务结束时用 git worktree remove 回收目录,手工删除过目录则用 git worktree prune 清理记录。
官方地址:https://git-scm.com/docs/git-worktree
一、先划分主目录和并行目录
假设仓库目录是 demo-app,它当前是主工作树。建议把并行目录放在仓库旁边,而不是放在 demo-app 内部。这样目录关系清楚,也不会把一个工作树误放进另一个工作树的文件范围。
可以先规划成下面这样:
demo-app:继续保留主分支或当前稳定分支。demo-app-search:专门处理feature/search。demo-app-login:专门处理fix/login。
真正执行前,要确认目标目录不存在,且目标分支没有已经被另一个工作树占用。Git 会把这些工作树的管理信息放在仓库内部,但每个工作树拥有独立的 HEAD 和索引。
二、用 git worktree add 创建已有分支的目录
在主仓库目录执行下面的命令。第一条把已有的 feature/search 分支签出到旁边的新目录,第二条对 fix/login 做同样的操作。
cd /path/to/demo-app
# 中文说明:为已有分支创建两个相邻的独立工作目录
git worktree add ../demo-app-search feature/search
git worktree add ../demo-app-login fix/login
# 中文说明:列出仓库当前登记的所有工作树,供后面核对
git worktree list
如果分支还不存在,可以在创建工作树时用 -b 创建新分支:
# 中文说明:从当前提交创建新分支,并把它直接放入新的工作目录
git worktree add -b feature/report ../demo-app-report
# 中文说明:进入新工作目录后,后续提交会落在 feature/report 上
cd ../demo-app-report
命令成功的判断不是“目录出现了”这么简单,还要确认目录中的分支与任务一致。不要在同一个工作树中再次执行普通 git switch 来代替 worktree,这会破坏并行目录的用途。

三、分别进入目录开展不同分支的工作
创建完成后,每个目录都可以作为独立的开发入口。你可以在一个终端进入 demo-app-search 修改搜索功能,在另一个终端进入 demo-app-login 修复登录问题。两个目录共享对象数据库和提交历史,但不会共享各自未提交的工作区文件。
# 中文说明:在搜索分支目录中确认当前分支,避免把修改写到主目录
cd ../demo-app-search
git branch --show-current
git status --short
# 中文说明:切换到登录分支目录时也单独确认一次
cd ../demo-app-login
git branch --show-current
git status --short
如果 git branch --show-current 显示的不是预期分支,先停止编辑,回到主仓库执行 git worktree list 检查绑定关系。并行工作目录的核心价值是减少切换,因此每个目录都要有清晰的命名。
四、用 git worktree list 核对路径和分支
git worktree list 会列出主工作树和 linked worktree。重点核对目录路径、当前提交以及分支名。若某个工作树已被锁定或路径缺失,列表还可能显示相应状态。
# 中文说明:使用 porcelain 格式,便于逐项核对 path、HEAD 和 branch 字段
git worktree list --porcelain
# 中文说明:查看更适合人工阅读的简洁列表
git worktree list
建议把结果核对分成三步:第一,路径数量是否等于规划的工作树数量;第二,demo-app-search 是否对应 feature/search,demo-app-login 是否对应 fix/login;第三,进入每个目录运行 git status --short,确认未提交修改只出现在对应任务目录。

五、任务结束后安全移除工作树
分支合并或任务取消后,先确认目录中的修改已经提交、转移或明确放弃,再移除工作树。默认情况下,Git 只允许移除干净的工作树;这能避免误删未提交文件。
# 中文说明:先查看目标工作树是否还有未提交内容
cd ../demo-app-search
git status --short
# 中文说明:回到主工作树后,移除已经完成的并行目录
cd ../demo-app
git worktree remove ../demo-app-search
# 中文说明:再次列出工作树,确认登记信息已经减少
git worktree list
如果确实要删除仍有修改的工作树,Git 提供 git worktree remove --force,但它会绕过干净状态保护。生产仓库或多人协作目录不建议把 --force 当成默认清理方式。
六、处理锁定、手工删除和路径搬迁
临时磁盘、网络盘或不希望被自动清理的工作树可以锁定,并用原因文字记录用途:
# 中文说明:锁定可移动或暂时离线的工作树,避免管理信息被自动清理
git worktree lock ../demo-app-login --reason "等待登录问题复现"
# 中文说明:工作树重新可用后解除锁定
git worktree unlock ../demo-app-login
# 中文说明:如果目录被手工删除,用 prune 清理仓库中的过期登记
git worktree prune
# 中文说明:如果目录被移动但仍要保留关联,用 repair 重新建立连接
git worktree repair ../demo-app-login
这里要区分三个动作:remove 是由 Git 管理的正常移除,prune 是清理已经缺失工作目录留下的管理记录,repair 则用于工作树或主仓库路径发生外部移动后的重新关联。不要用 prune 代替正常的 remove。
常见问题
一个分支为什么不能同时被两个 worktree 使用?
Git 默认会阻止同一分支同时被多个工作树签出,这是为了避免两个目录同时推进同一个分支产生混乱。需要并行处理时,应为不同任务建立不同分支。
删除目录后为什么 list 里还有记录?
直接删除目录没有经过 Git 的正常移除流程,仓库中可能还留有 linked worktree 的管理信息。回到主工作树执行 git worktree prune,再用 git worktree list 查看登记是否清理。
worktree 会不会复制一份完整仓库?
它会创建新的工作目录和必要的每个工作树元数据,同时共享仓库对象和提交历史;因此通常比完整复制仓库更适合短期并行任务,但每个工作目录仍要单独安装依赖和保存未提交修改。
总结
这套流程可以记成“规划目录、add 创建、进入后确认分支、list 验收、remove 回收”。遇到工作树离线、被手工删除或路径搬迁,再分别使用 lock、prune 和 repair。只要每个目录绑定一个明确分支,就能在同一个 Git 仓库中稳定地并行处理多个任务。
DBeaver 数据编辑器怎样批量修改查询结果并提交
- 上一篇
- DBeaver 数据编辑器怎样批量修改查询结果并提交
- 下一篇
- Postman mock server怎样用示例响应模拟接口
-
- 文章 · 软件教程 | 1小时前 |
- Postman mock server怎样用示例响应模拟接口
- 249浏览 收藏
-
- 文章 · 软件教程 | 1小时前 |
- DBeaver 数据编辑器怎样批量修改查询结果并提交
- 144浏览 收藏
-
- 文章 · 软件教程 | 2小时前 |
- Docker Compose profiles怎样按环境启用不同服务
- 145浏览 收藏
-
- 文章 · 软件教程 | 2小时前 | 定时任务 · CI/CD · gitHub actions · Schedule Cron GitHub Actions timezone
- GitHub Actions schedule 怎样按时区安排定时工作流
- 227浏览 收藏
-
- 文章 · 软件教程 | 2小时前 |
- GitHub Actions environments怎样给部署环境设置审批门槛
- 309浏览 收藏
-
- 文章 · 软件教程 | 2小时前 |
- VS Code Remote Tunnels 怎样让隧道在后台持续运行
- 488浏览 收藏
-
- 文章 · 软件教程 | 2小时前 | 开发环境 · vs code · 软件教程 · VS Code Dev Containers workspaceFolder workspaceMount Docker 挂载
- VS Code Dev Containers 怎样为项目指定工作区挂载目录
- 477浏览 收藏
-
- 文章 · 软件教程 | 2小时前 |
- VS Code 用户代码片段怎样导出到另一台电脑
- 449浏览 收藏
-
- 文章 · 软件教程 | 3小时前 |
- VS Code Markdown 预览怎样同步定位当前标题
- 501浏览 收藏
-
- 文章 · 软件教程 | 1天前 | docker · 配置 · 环境变量 Docker Compose env_file
- Docker Compose 怎样使用 env_file 管理服务变量
- 271浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 485次学习
-
- PubMedQA
- 深入了解PubMedQA生物医学问答数据集,涵盖其核心功能、使用方法及在临床决策、药物研发等场景的应用,助力提升NLP模型性能。
- 880次使用
-
- H2O EvalGPT
- H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
- 876次使用
-
- LMArena
- LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
- 960次使用
-
- HELM
- 深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
- 941次使用
-
- MMBench
- MMBench是由上海人工智能实验室等机构联合推出的多模态基准测试平台,提供细粒度能力评估、大规模数据集及VLMEvalKit工具。本文详细介绍其核心功能、安装使用方法及应用场景,助力开发者全面评估多模态模型性能。
- 768次使用
-
- SSH 连接 Git 报 Permission denied (publickey) 怎么办?一套排查清单
- 2026-06-17 146浏览
-
- 配音工作室 怎样确认交付音频的命名与版本
- 2026-10-27 210浏览
-
- Go 1.27 go doc 支持 package@version:查指定版本 API 时如何避免看错文档
- 2026-08-31 474浏览
-
- Go 编译时怎么写入版本号和 Git 提交信息
- 2026-09-06 358浏览
-
- Go pkg.go.dev API 怎么读取包文档索引
- 2026-10-05 381浏览

