惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
月光博客
月光博客
MyScale Blog
MyScale Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
爱范儿
爱范儿
P
Proofpoint News Feed
人人都是产品经理
人人都是产品经理
Last Week in AI
Last Week in AI
罗磊的独立博客
G
Google Developers Blog
Y
Y Combinator Blog
博客园 - 【当耐特】
WordPress大学
WordPress大学
大猫的无限游戏
大猫的无限游戏
博客园 - 叶小钗
J
Java Code Geeks
酷 壳 – CoolShell
酷 壳 – CoolShell
V
Visual Studio Blog
美团技术团队
宝玉的分享
宝玉的分享
Jina AI
Jina AI
小众软件
小众软件
T
Tailwind CSS Blog
A
About on SuperTechFans

博客园 - Swizard

Linux 日志神器 journalctl 完全指南:彻底替代传统日志查看方式 还在被框架绑架?一文看懂“六边形架构”,让你的核心业务稳如泰山! 逐行解剖:扒开 Lovable Agent 源码,看顶级 AI 是如何“思考”与“动刀”的 还在无脑堆砌提示词?三分钟看懂 Vercel v0 价值千万的 System Prompt 底层逻辑 OpenClaw+OpenViking + NVIDIA API 配置教程 拒绝“挤牙膏”!用苏格拉底提示法,让 AI 从“复读机”进化为“咨询顾问” 别再写丑陋的 Shell 脚本了:用 Gum 给你的终端穿上“高定西装” 告别 sudo 滥用!用 gosu 优雅解决 Docker 容器权限的“千古难题” 拒绝视觉噪音:用“数据墨水比”法则重塑你的专业图表 手机里的 Linux 实验室:Termux 让你随时随地开启“黑客”模式 拒绝“隐形”!用 JSON-LD 让你的网页在 Google 搜索结果中“自带光环” ⚔️ Google SGE vs. Perplexity:一场内容争夺战,两套生存法则 SEO 已死?拥抱 AEO/GEO:如何让 AI 主动“推荐”你的网站 Python 重构神器:告别 ast 模块的痛苦,三行代码搞定复杂批量修改 别再手写递归找文件了!用 Python rglob 一行代码搞定海量搜索 告别笨重的 For 循环:用 xargs 打造 Linux 命令行流水线神器 告别“断网即崩溃”:像存档游戏一样管理你的终端会话(Tmux 终极入门) 沉默的观察者:Multi-Agent 架构如何实现“零指令”主动服务? 杀死那个提示词框:揭秘“意图识别 + 动态组装”的幕后逻辑 UI 设计如何落地“Boss Mode”?告别聊天框的四个交互法则 用 100 倍 Token 换取 10% 体验:关于 AI Agent 的“暴力美学”
告别 Git Stash:用 Git Worktree 实现多任务并行,效率起飞!
Swizard · 2026-02-06 · via 博客园 - Swizard

1. 引言:那个让你抓狂的“突发需求”

想象一下这个场景: 你正在 feature-awesome 分支上热火朝天地写着几百行核心代码,正处于“心流”状态。突然,老板冲进办公室:“生产环境出 Bug 了,赶紧切到 master 修复一下!”

此时的你陷入了纠结:

  • 方案 A:git stash。把改了一半的代码藏起来。等你修完 Bug 回来 stash pop 时,往往会因为忘记了当时的环境或者遇到冲突而一脸懵逼。

  • 方案 B:直接 git checkout。报错!Git 提醒你本地修改会被覆盖,切不过去。

  • 方案 C:暴力 git clone。在另一个文件夹再克隆一份项目。不仅浪费硬盘空间,还得重新装依赖、配置环境变量,半小时过去了。

有没有一种办法,能让我像切浏览器标签页一样,同时打开多个分支工作,互不干扰?

这就是我们要聊的主角:Git Worktree


2. 概念拆解:什么是 Worktree?

生活化类比:乐高工作台

想象你正在拼一套复杂的“星球大战”乐高(这是你的主项目)。

  • 传统的 Git 像是一个只有一个桌面的工作台。你想拼“死星”,就得把还没拼好的“千年隼”拆掉或收进盒子里,腾出地方。

  • Git Worktree 则是给你瞬间变出第二个、第三个独立的工作台。这些工作台共享同一个零件仓库(.git 目录),但桌面是独立的。你可以在台子 A 修 Bug,在台子 B 写新功能,抬头就能看见彼此,转身就能切换。

核心逻辑

在 Git 的世界里,一个仓库通常由两部分组成:

  1. .git 文件夹(仓库的灵魂:存储历史、版本信息)。

  2. 工作区(仓库的肉体:你实际看到的代码文件)。

默认情况下,一个灵魂只配一个肉体。但 Git Worktree 允许一个 .git 文件夹同时管理多个工作区


3. 动手实战:三秒开启新工作区

假设你现在在 main 分支,需要去 hotfix 分支修 Bug。

第一步:创建新工作区

不要切换分支,直接运行:

# 格式:git worktree add <路径> <分支名>
git worktree add ../my-project-hotfix hotfix

这条命令的意思是:在当前目录的上一级创建一个名为 my-project-hotfix 的文件夹,并在这个文件夹里检出 hotfix 分支。

第二步:进入并开始工作

cd ../my-project-hotfix
# 这里的代码完全独立,随便改,随便编译!

第三步:修完撤退

Bug 修复并提交后,你可以回到主目录,把临时工作区删掉:

# 回到主仓库
cd ../my-project
# 移除工作区记录
git worktree remove ../my-project-hotfix

4. 进阶深潜:新手避坑指南

常见陷阱:同一个分支不能同时检出

Git 有一个保护机制:同一个分支不能在两个不同的工作区中同时被检出。 如果你尝试在 Worktree A 中切换到 Worktree B 正在使用的分支,Git 会无情地拒绝你。这是为了防止多个工作区同时修改同一个引用导致的数据错乱。

最佳实践:统一管理 Worktree

如果你频繁使用这个功能,建议将所有的 Worktree 放在项目根目录之外的一个统一文件夹里,或者在项目内创建一个 .worktrees/ 目录并将其加入 .gitignore

常用命令清单: | 命令 | 用途 | | :--- | :--- | | git worktree list | 查看当前所有的工作区及其所在路径 | | git worktree add -b <new-branch> <path> | 创建一个新分支并同时开启新工作区 | | git worktree prune | 清理那些已经手动删除文件夹但还没注销的工作区信息 |


5. 总结与延伸

Git Worktree 的核心价值在于:它打破了“分支切换”带来的上下文丢失,实现了物理隔离的并行开发。

它比 stash 更安全,比 clone 更轻量(共享 .git 目录,极省空间)。