当前位置:首页 > 文章列表 > 文章 > 软件教程 > Git worktree怎样为多个分支创建并行工作目录

Git worktree怎样为多个分支创建并行工作目录

来源:17golang原创 2026-11-04 12:24:40 0浏览 收藏

如果你需要同时处理多个分支,直接在同一个目录里反复切换分支,容易把未提交修改带到错误的任务上。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,这会破坏并行目录的用途。

Git worktree 主工作树与多个分支工作目录的关系说明图
图1:Git 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 worktree list 路径分支和清理状态核对说明图
图2:Git worktree 关联关系与清理状态的结果示意图,不是实际运行截图。

五、任务结束后安全移除工作树

分支合并或任务取消后,先确认目录中的修改已经提交、转移或明确放弃,再移除工作树。默认情况下,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 仓库中稳定地并行处理多个任务。

版本声明
本文转载于:17golang原创 如有侵犯,请联系study_golang@163.com删除
DBeaver 数据编辑器怎样批量修改查询结果并提交DBeaver 数据编辑器怎样批量修改查询结果并提交
上一篇
DBeaver 数据编辑器怎样批量修改查询结果并提交
Postman mock server怎样用示例响应模拟接口
下一篇
Postman mock server怎样用示例响应模拟接口
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    543次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    516次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    500次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    485次学习
查看更多
AI推荐
  • PubMedQA数据集详解:生物医学问答基准、功能与应用指南
    PubMedQA
    深入了解PubMedQA生物医学问答数据集,涵盖其核心功能、使用方法及在临床决策、药物研发等场景的应用,助力提升NLP模型性能。
    880次使用
  • H2O EvalGPT:开源LLM大模型评估与排行榜工具
    H2O EvalGPT
    H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
    876次使用
  • LMArena是什么?伯克利AI模型评估平台使用指南与功能解析
    LMArena
    LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
    960次使用
  • 斯坦福HELM:大语言模型Holistic Evaluation整体评估框架详解
    HELM
    深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
    941次使用
  • MMBench详解:多模态大模型基准测试、功能特点与使用指南
    MMBench
    MMBench是由上海人工智能实验室等机构联合推出的多模态基准测试平台,提供细粒度能力评估、大规模数据集及VLMEvalKit工具。本文详细介绍其核心功能、安装使用方法及应用场景,助力开发者全面评估多模态模型性能。
    768次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议 和 隐私政策
返回登录
  • 重置密码