Featured image of post 为什么切换分支一定要 git stash?Git Worktree 是什么?Git Worktree 与 Git Branch 有什么差别?如何用 Git Worktree 打造高效多线程开发流程?告别频繁切换与冲突!

为什么切换分支一定要 git stash?Git Worktree 是什么?Git Worktree 与 Git Branch 有什么差别?如何用 Git Worktree 打造高效多线程开发流程?告别频繁切换与冲突!

正在开发新功能却遇到紧急 Bug?别再用 git stash 藏代码了!介绍 Git Worktree 的核心概念、与 Git Branch 的差异、实战目录规划及 AI Agent 协作的最佳实践。

你有没有遇到过这种情况?正在开发一个复杂的新功能,代码写到一半,突然接到紧急 Bug 需要立刻修复。

为了切换分支,你只好心不甘情不愿地执行 git stash 藏起半成品的代码。修完 Bug 切回来后,还要小心翼翼地 git stash pop,甚至有时候还会遇到代码冲突的噩梦。

其实 Git 早就有一个超强的工具能解决这个痛点,那就是 Git Worktree

告别混乱的切换与 Stash,用 Worktree 开启多线程开发

这篇文章带你一次搞懂它的核心运作与实战用法。

Git Worktree 与 Git Branch 有什么不同?

要搞懂 Git Worktree,我们先厘清它和 Git Branch 的差别。

我们可以把版本控制想象成在读一本书:

  • Commit书本的版本
  • Branch夹在某页的书签
  • Worktree 则是 让你摊开书本的工作桌

传统做法中,我们只有一张工作桌。每当要切换书签时,就必须把桌面上正在修改的纸张全部收起来或藏进抽屉(也就是 git stash)。

Git Worktree 则允许你同时拥有好几张 独立的工作桌

比较项目 Git Branch Git Worktree
工作区概念 共享单一实体工作目录 拥有多个独立的实体工作目录
切换分支代价 需提交、Stash 或暂存变更 无需 Stash,直接切换目录即可
隔离安全性 未提交文件可能产生冲突或残留 目录完全隔离,变更互不干扰
历史纪录 共享 Git Commit 历史与分支 共享 Git Commit 历史与分支

不同 Worktree 的目前分支、暂存区与未提交修改完全独立,但它们彼此会 共享所有的 Commit 历史与分支纪录

Branch 是版本书签,Worktree 是实体工作桌

这样一来,你需要切换任务时,只要开启另一个文件夹目录即可,完全不需要变动当前的开发状态。

如何开始使用 Git Worktree?

在实际项目中导入 Git Worktree 时,良好的目录规划能让开发更顺畅。

建议把原本 git clone 下来的项目目录当作干净的 main 总部,并将新建的 Worktree 目录放在项目外层(例如 ../my-app-worktrees),避免开发工具递归扫描文件夹时出错。

常用的指令流程如下:

流程 指令
1. 建立新 Worktree 并同时建立新分支 git worktree add ../my-app-worktrees/feature-login -b feature-login
2. 查看目前所有的 Worktree 清单 git worktree list

Git Worktree 特别适合用来管理 AI Agent 的开发任务。

你可以给 AI Agent 一个独立的 Worktree 目录让它尽情修改与测试,而人类开发者可以在另一个 Worktree 进行代码审查(Review)与测试。

给 AI Agent 独立的 Worktree,让 AI 开发与人类审查可以平行处理

两者在各自的实体目录中运作,既安全又清晰。

开发完成后如何合并与安全清理?

当你在独立的 Worktree 完成开发后,接下来该如何将成果合并并进行清理?

请记住一个重要观念:Worktree 目录本身不需要合并,真正要合并的是 Branch 分支

你只需要回到 main 的工作桌目录,直接执行 git merge 对应的功能分支即可完成整合。

清理时请依照标准的二步骤流程:

步骤 指令
1. 移除 Worktree 实体目录 git worktree remove ../my-app-worktrees/feature-login
2. 删除已完成的功能分支 git branch -d feature-login

先移除 Worktree 目录,再删除 Branch 分支

请务必使用 git worktree remove 指令来清理,而不是直接在文件资源管理器中手动删除文件夹。

使用 Git Worktree 有哪些常见陷阱?

虽然 Git Worktree 非常方便,但在使用时有几个地雷需要特别注意。

陷阱 1: 未提交的修改会遗失

虽然删除 Worktree 不会删除 Branch 分支,但如果你在该目录还有没 commit 的变更,强制删除 Worktree 目录就会导致那些未提交的修改付之一炬。

陷阱 2: 分支占用冲突

Git 的保护机制 不允许同一个 Branch 分支同时在两个不同的 Worktree 中 Checkout。如果你试图在第二个 Worktree 切换到已经被占用的分支,Git 会直接阻挡并抛出错误信息。

强制删除 Worktree 会失去尚未 Commit 的变更

只要掌握好这些特性与原则,就能避免踩坑。

结论

通过 Git Worktree,我们可以彻底告别混乱的分支切换与 git stash 流程,实现真正的多线程开发。

下次不管是遇到紧急 Bug 需要修复、同时推进多个功能,还是指派任务给 AI Agent 协助写代码,不妨试着开一张新的工作桌吧!

Reference

All rights reserved,未經允許不得隨意轉載
Built with Hugo
主题 StackJimmy 设计