Git Worktree实用指南:同时开发两个分支,不再反复切换

Git Worktree实用指南:同时开发两个分支,不再反复切换

前言

开发新功能时突然收到线上问题,需要马上切换到修复分支。此时当前目录可能还有未提交修改,直接切换分支既麻烦又容易带错文件。

git worktree允许同一个Git仓库同时拥有多个工作目录。每个目录可以检出不同分支,但它们共享底层仓库对象,因此不需要重复克隆完整项目。

一、查看现有工作树

在仓库中执行:

bash 复制代码
git worktree list

输出可能类似:

text 复制代码
D:/projects/shop          a1b2c3d [main]

这表示当前主工作目录位于D:/projects/shop,检出的是main分支。

二、为已有分支创建工作目录

假设仓库中已经存在hotfix/login分支,可以创建一个独立目录:

bash 复制代码
git worktree add ../shop-hotfix hotfix/login

创建完成后的结构大致如下:

text 复制代码
projects/
├── shop/          # 原目录,继续开发当前功能
└── shop-hotfix/   # 新目录,处理登录修复

两个目录可以分别打开编辑器、安装依赖和运行测试,互不覆盖工作区文件。

三、创建新分支并建立工作树

如果修复分支尚不存在,可以使用-b创建:

bash 复制代码
git worktree add -b hotfix/payment ../shop-payment main

这条命令会基于main创建hotfix/payment分支,并在../shop-payment目录中检出。

执行前应先确认基准分支是否正确,避免从错误的提交开始开发。

四、为什么同一分支不能同时检出?

Git通常不允许同一个本地分支同时被两个工作树检出。原因是两个目录如果同时修改并提交到同一分支,分支指针和工作区状态容易产生冲突。

如果只是需要查看某个提交,可以创建分离头指针工作树:

bash 复制代码
git worktree add --detach ../shop-review HEAD

这种目录适合代码查看和临时测试。如果要保留修改,应在其中创建新分支后再提交。

五、移除不再使用的工作树

修复完成并确认目录中没有需要保留的修改后,可以执行:

bash 复制代码
git worktree remove ../shop-hotfix

这是会删除对应工作目录的操作,执行前应先进入该目录检查状态:

bash 复制代码
git status

如果用户手动删除了工作树目录,Git中可能仍保留无效记录。可以先查看,再清理:

bash 复制代码
git worktree list
git worktree prune --dry-run
git worktree prune

--dry-run只显示计划清理的内容,适合在正式执行前确认范围。

六、工作树与依赖目录

不同工作树拥有独立的普通文件,因此node_modules、Python虚拟环境和构建输出通常也要分别生成。

这会占用额外磁盘空间,但可以避免不同分支依赖版本互相污染。不要随意让多个工作树共享可写构建目录,否则可能出现难以定位的缓存问题。

七、一个常见的并行工作流程

假设主目录正在开发功能:

text 复制代码
shop/ -> feature/cart

线上出现问题后,可以执行:

bash 复制代码
git fetch origin
git worktree add -b hotfix/login ../shop-hotfix origin/main

然后在新目录中完成以下操作:

bash 复制代码
cd ../shop-hotfix
git status
# 修改代码并运行测试
git add <明确的文件>
git commit -m "fix: handle expired login session"

修复任务完成后,原目录中的功能开发状态仍保持不变,不需要暂存未完成代码,也不用来回切换分支。

八、使用时的注意事项

  • 创建工作树前确认目标路径不存在或为空;
  • 每个工作树使用独立分支;
  • 删除前检查未提交和未跟踪文件;
  • 不要把工作树建立在主仓库内部;
  • 大型项目需要考虑依赖和构建产物占用空间;
  • 定期通过git worktree list检查遗留目录。

总结

git worktree适合紧急修复、并行功能开发、代码审查和多版本测试。它的价值不是替代分支,而是让不同分支拥有独立工作目录,从而减少暂存、切换和恢复现场的成本。

推荐标签: Git、版本控制、开发工具、Git Worktree

相关推荐
橙橙笔记1 小时前
QT安卓软件的制作
android·git·qt·软件
我是人✓1 小时前
Git远程协作与标签管理全攻略
git
闰土_RUNTU2 小时前
Git实用手册(持续更新)
git
Shaoshing2 小时前
ggggggggit
git
Lucky GGBond3 小时前
解决 Git 推送报错:Could not resolve host 及 DNS 劫持排查指南
git
川石课堂软件测试3 小时前
自动化测试|持续集成Git使用详解
git·python·jmeter·mysql·ci/cd·容器·kubernetes
陈聪.4 小时前
CI/CD 与 Git 工具使用知识总结
git·ci/cd
Tairitsu_H5 小时前
[版本控制器Git] Git 版本控制 | 三区模型与版本回退 | 分支管理
git·版本·分支·版本控制器·三区
王琦03187 小时前
git使用手册
大数据·git·elasticsearch
曦夜日长7 小时前
Git系统篇,Git远程仓库(三):本地仓库与远程仓库的交互
linux·服务器·网络·git·交互