当前位置:首页 > 文章列表 > 文章 > 软件教程 > 开发工具 Git worktree 并行分支 怎样处理

开发工具 Git worktree 并行分支 怎样处理

来源:17golang原创 2026-10-22 06:33:56 0浏览 收藏

需要同时维护 main 和 feature-login 两条分支时,不必把未提交文件先藏进 stash 再切换分支。Git worktree 可以让同一个仓库拥有多个工作目录,每个目录独立检出一个分支;开发工具再把这些目录作为多个仓库入口展示。

本文用一个主工作区和一个功能 worktree 演示完整操作:创建、分别打开、比较改动、迁移未提交文件,以及最后清理临时目录。Git 共享提交历史,但每个 worktree 有自己的文件、暂存区和当前分支。

官方入口:https://code.visualstudio.com/docs/sourcecontrol/branches-worktrees

Git 命令参考:https://git-scm.com/docs/git-worktree.html

一、先判断是否应该使用 Git worktree

如果只是短暂切换分支,普通分支切换或 stash 已经够用;如果当前目录有一组未提交改动,同时又要修复另一条分支,worktree 更合适。它把两条分支放进不同文件夹,避免反复切换同一目录里的文件。

需求更合适的方式原因
临时收起少量未提交文件stash不需要长期保留第二个目录
两个分支同时运行或对比worktree每个分支有独立工作目录和暂存区
把功能提交合并回主线分支合并提交历史仍然共享,不靠复制文件合并

打开开发工具后,先从源代码管理视图进入 Repositories。仓库名称、当前分支和工作区状态都能在这里确认。开发工具需要单独安装 Git,内置的是 Git 集成而不是 Git 本身。

二、在开发工具中创建第二个 worktree

创建入口通常位于 Source Control 的 Repositories 视图。针对目标仓库打开 More Actions(更多操作),选择 Worktrees > Create Worktree。

  1. 选择一个已有分支,例如 feature-login;如果分支还不存在,按提示创建新分支。
  2. 选择新的文件夹,例如仓库同级目录下的 project-feature-login,不要覆盖当前主工作区。
  3. 确认创建,让工具在新目录检出选定分支。
开发工具中从 Repositories 进入 Worktrees 创建并行分支的原创界面说明图
图1:创建 worktree 的入口、分支和目录关系示意图;这是原创操作示意图,不是实际软件截图。

创建完成后,Repositories 视图应同时出现主工作区和新的 linked worktree。Git 不允许同一个本地分支同时被两个 worktree 检出,因此如果提示分支已被占用,应改选其他分支或先确认已有 worktree 的用途。

三、分别打开两个工作目录

右键新 worktree,可以选择 Open Worktree in New Window;也可以使用 File > Open Folder 直接打开它的文件夹。建议主分支和功能分支各保留一个窗口,并在窗口标题或状态栏确认分支名。

两个 worktree 共享仓库的提交历史、分支和远程地址,但不共享工作文件和未提交状态。因此,在 feature-login 窗口编辑文件时,main 窗口不会同步显示这份未提交改动。这个隔离正是 worktree 适合并行开发的原因。

被 .gitignore 排除的本地文件(例如环境文件或依赖目录)默认不会复制到新 worktree。需要共享这些文件时,可以在设置中配置 git.worktreeIncludeFiles;需要用符号链接共享大型目录时,可以了解实验性的 git.worktreeSymlinkFolders,但要注意一个 worktree 中的修改会影响其他链接目录。

四、比较改动并迁移未提交文件

在功能 worktree 中产生改动后,先在 Source Control 的变更文件上打开上下文菜单,选择 Compare with Workspace,查看它与主工作区的差异。这个比较动作只帮助确认差异,不会自动提交或合并。

如果确定要把未提交改动移回主工作区,打开命令面板,运行 Git: Migrate Worktree Changes...,按提示选择目标仓库和来源 worktree,确认 Proceed。迁移的是未提交改动,包括未跟踪文件;它不会把已经提交的内容当成未提交文件迁移。

开发工具中比较 worktree 文件并迁移未提交改动的原创界面说明图
图2:Compare with Workspace 与 Migrate Worktree Changes 的关系示意图;这是原创结果示意图,不是运行证据。

如果迁移提示目标目录也有本地改动,先在目标 worktree 提交或暂存这些改动,再重新操作。如果出现冲突,按普通合并冲突流程解决,确认目标目录的文件内容后再提交。

五、用命令行确认状态并安全清理

界面入口适合日常操作,命令行适合在清理前快速确认路径。下面的命令只用于示例,路径请替换成自己的 worktree 目录:

# 查看主工作区和所有 linked worktree 的路径、分支与状态
git worktree list

# 删除一个已经提交或保持干净的 linked worktree
# 先确认路径确实指向不再使用的功能目录
git worktree remove ../project-feature-login

# 目录被文件管理器手动删除后,清理 Git 中残留的管理信息
git worktree prune

git worktree remove 默认只删除干净的 linked worktree;如果目录还有未提交或未跟踪文件,先处理这些文件,再考虑清理。主工作区不能用这个命令删除。不要把 git worktree prune 当成普通删除命令,它主要处理已经失去目录对应关系的陈旧管理信息。

常见问题

为什么新 worktree 里没有 .env 或依赖目录?

这些内容通常被 .gitignore 排除,Git 默认不会复制。可以为安全的本地文件配置 git.worktreeIncludeFiles,但不要把密钥、令牌或个人凭据加入共享配置。

为什么同一个分支不能再次创建 worktree?

一个本地分支同一时间只能被一个 worktree 检出,这是 Git 用来避免两个目录同时写同一分支指针的保护。为第二个目录创建新分支,或先移除原有 worktree。

迁移改动后,提交历史会一起移动吗?

不会。Migrate Worktree Changes 处理的是未提交文件;已经提交的内容应通过分支合并或其他正常 Git 历史操作带回目标分支。

最后确认

并行分支的关键不是复制一份项目,而是让多个工作目录挂在同一份 Git 历史上。创建后确认每个窗口的分支名,比较前先看目标目录是否有本地改动,清理前用 git worktree list 核对路径,就能把 worktree 用在并行修复、功能开发和分支对比上。

版本声明
本文转载于:17golang原创 如有侵犯,请联系study_golang@163.com删除
开发工具 Compose 等待依赖健康 怎样处理开发工具 Compose 等待依赖健康 怎样处理
上一篇
开发工具 Compose 等待依赖健康 怎样处理
开发工具 BuildKit 构建缓存 怎样处理
下一篇
开发工具 BuildKit 构建缓存 怎样处理
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之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模型性能。
    586次使用
  • H2O EvalGPT:开源LLM大模型评估与排行榜工具
    H2O EvalGPT
    H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
    622次使用
  • LMArena是什么?伯克利AI模型评估平台使用指南与功能解析
    LMArena
    LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
    656次使用
  • 斯坦福HELM:大语言模型Holistic Evaluation整体评估框架详解
    HELM
    深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
    622次使用
  • MMBench详解:多模态大模型基准测试、功能特点与使用指南
    MMBench
    MMBench是由上海人工智能实验室等机构联合推出的多模态基准测试平台,提供细粒度能力评估、大规模数据集及VLMEvalKit工具。本文详细介绍其核心功能、安装使用方法及应用场景,助力开发者全面评估多模态模型性能。
    438次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议 和 隐私政策
返回登录
  • 重置密码