<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Git Worktree on Dev TLDRLSS</title>
        <link>https://dev.tldrlss.com/zh-cn/tags/git-worktree/</link>
        <description>Recent content in Git Worktree on Dev TLDRLSS</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh-cn</language>
        <lastBuildDate>Sat, 08 Aug 2026 08:29:00 +0800</lastBuildDate><atom:link href="https://dev.tldrlss.com/zh-cn/tags/git-worktree/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>为什么切换分支一定要 git stash？Git Worktree 是什么？Git Worktree 与 Git Branch 有什么差别？如何用 Git Worktree 打造高效多线程开发流程？告别频繁切换与冲突！</title>
        <link>https://dev.tldrlss.com/zh-cn/article/2026/08/git-worktrees-branch-guide-multi-thread-workflow/</link>
        <pubDate>Sat, 08 Aug 2026 08:29:00 +0800</pubDate>
        
        <guid>https://dev.tldrlss.com/zh-cn/article/2026/08/git-worktrees-branch-guide-multi-thread-workflow/</guid>
        <description>&lt;img src="https://dev.tldrlss.com/global-assets/images/app/git-1.jpg" alt="Featured image of post 为什么切换分支一定要 git stash？Git Worktree 是什么？Git Worktree 与 Git Branch 有什么差别？如何用 Git Worktree 打造高效多线程开发流程？告别频繁切换与冲突！" /&gt;&lt;p&gt;你有没有遇到过这种情况？正在开发一个复杂的新功能，代码写到一半，突然接到紧急 Bug 需要立刻修复。&lt;/p&gt;
&lt;p&gt;为了切换分支，你只好心不甘情不愿地执行 &lt;code&gt;git stash&lt;/code&gt; 藏起半成品的代码。修完 Bug 切回来后，还要小心翼翼地 &lt;code&gt;git stash pop&lt;/code&gt;，甚至有时候还会遇到代码冲突的噩梦。&lt;/p&gt;
&lt;p&gt;其实 &lt;code&gt;Git&lt;/code&gt; 早就有一个超强的工具能解决这个痛点，那就是 &lt;code&gt;Git Worktree&lt;/code&gt;。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;告别混乱的切换与 Stash，用 Worktree 开启多线程开发&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;这篇文章带你一次搞懂它的核心运作与实战用法。&lt;/p&gt;
&lt;h2 id=&#34;git-worktree-与-git-branch-有什么不同&#34;&gt;Git Worktree 与 Git Branch 有什么不同？
&lt;/h2&gt;&lt;p&gt;要搞懂 &lt;code&gt;Git Worktree&lt;/code&gt;，我们先厘清它和 &lt;code&gt;Git Branch&lt;/code&gt; 的差别。&lt;/p&gt;
&lt;p&gt;我们可以把版本控制想象成在读一本书：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Commit&lt;/code&gt; 是 &lt;strong&gt;书本的版本&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Branch&lt;/code&gt; 是 &lt;strong&gt;夹在某页的书签&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Worktree&lt;/code&gt; 则是 &lt;strong&gt;让你摊开书本的工作桌&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;传统做法中，我们只有一张工作桌。每当要切换书签时，就必须把桌面上正在修改的纸张全部收起来或藏进抽屉（也就是 &lt;code&gt;git stash&lt;/code&gt;）。&lt;/p&gt;
&lt;p&gt;而 &lt;code&gt;Git Worktree&lt;/code&gt; 则允许你同时拥有好几张 &lt;strong&gt;独立的工作桌&lt;/strong&gt;。&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;比较项目&lt;/th&gt;
          &lt;th&gt;Git Branch&lt;/th&gt;
          &lt;th&gt;Git Worktree&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;工作区概念&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;共享单一实体工作目录&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;拥有多个独立的实体工作目录&lt;/strong&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;切换分支代价&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;需提交、Stash 或暂存变更&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;无需 Stash，直接切换目录即可&lt;/strong&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;隔离安全性&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;未提交文件可能产生冲突或残留&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;目录完全隔离，变更互不干扰&lt;/strong&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;历史纪录&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;共享 Git Commit 历史与分支&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;共享 Git Commit 历史与分支&lt;/strong&gt;&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;不同 Worktree 的目前分支、暂存区与未提交修改完全独立，但它们彼此会 &lt;strong&gt;共享所有的 Commit 历史与分支纪录&lt;/strong&gt;。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Branch 是版本书签，Worktree 是实体工作桌&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;这样一来，你需要切换任务时，只要开启另一个文件夹目录即可，完全不需要变动当前的开发状态。&lt;/p&gt;
&lt;!--adsense--&gt;
&lt;h2 id=&#34;如何开始使用-git-worktree&#34;&gt;如何开始使用 Git Worktree？
&lt;/h2&gt;&lt;p&gt;在实际项目中导入 &lt;code&gt;Git Worktree&lt;/code&gt; 时，良好的目录规划能让开发更顺畅。&lt;/p&gt;
&lt;p&gt;建议把原本 &lt;code&gt;git clone&lt;/code&gt; 下来的项目目录当作干净的 &lt;code&gt;main&lt;/code&gt; 总部，并将新建的 Worktree 目录放在项目外层（例如 &lt;code&gt;../my-app-worktrees&lt;/code&gt;），避免开发工具递归扫描文件夹时出错。&lt;/p&gt;
&lt;p&gt;常用的指令流程如下：&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;流程&lt;/th&gt;
          &lt;th&gt;指令&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;1. 建立新 Worktree 并同时建立新分支&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;git worktree add ../my-app-worktrees/feature-login -b feature-login&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;2. 查看目前所有的 Worktree 清单&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;git worktree list&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;code&gt;Git Worktree&lt;/code&gt; 特别适合用来管理 &lt;code&gt;AI Agent&lt;/code&gt; 的开发任务。&lt;/p&gt;
&lt;p&gt;你可以给 &lt;code&gt;AI Agent&lt;/code&gt; 一个独立的 Worktree 目录让它尽情修改与测试，而人类开发者可以在另一个 Worktree 进行代码审查（Review）与测试。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;给 AI Agent 独立的 Worktree，让 AI 开发与人类审查可以平行处理&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;两者在各自的实体目录中运作，既安全又清晰。&lt;/p&gt;
&lt;h2 id=&#34;开发完成后如何合并与安全清理&#34;&gt;开发完成后如何合并与安全清理？
&lt;/h2&gt;&lt;p&gt;当你在独立的 Worktree 完成开发后，接下来该如何将成果合并并进行清理？&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;请记住一个重要观念：Worktree 目录本身不需要合并，&lt;strong&gt;真正要合并的是 Branch 分支&lt;/strong&gt;。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;你只需要回到 &lt;code&gt;main&lt;/code&gt; 的工作桌目录，直接执行 &lt;code&gt;git merge&lt;/code&gt; 对应的功能分支即可完成整合。&lt;/p&gt;
&lt;p&gt;清理时请依照标准的二步骤流程：&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;步骤&lt;/th&gt;
          &lt;th&gt;指令&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;1. 移除 Worktree 实体目录&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;git worktree remove ../my-app-worktrees/feature-login&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;2. 删除已完成的功能分支&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;git branch -d feature-login&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;先移除 Worktree 目录，再删除 Branch 分支&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;请务必使用 &lt;code&gt;git worktree remove&lt;/code&gt; 指令来清理，而不是直接在文件资源管理器中手动删除文件夹。&lt;/p&gt;
&lt;!--adsense--&gt;
&lt;h2 id=&#34;使用-git-worktree-有哪些常见陷阱&#34;&gt;使用 Git Worktree 有哪些常见陷阱？
&lt;/h2&gt;&lt;p&gt;虽然 &lt;code&gt;Git Worktree&lt;/code&gt; 非常方便，但在使用时有几个地雷需要特别注意。&lt;/p&gt;
&lt;h3 id=&#34;陷阱-1-未提交的修改会遗失&#34;&gt;陷阱 1: 未提交的修改会遗失
&lt;/h3&gt;&lt;p&gt;虽然删除 Worktree 不会删除 Branch 分支，但如果你在该目录还有没 commit 的变更，强制删除 Worktree 目录就会导致那些未提交的修改付之一炬。&lt;/p&gt;
&lt;h3 id=&#34;陷阱-2-分支占用冲突&#34;&gt;陷阱 2: 分支占用冲突
&lt;/h3&gt;&lt;p&gt;&lt;code&gt;Git&lt;/code&gt; 的保护机制 &lt;strong&gt;不允许同一个 Branch 分支同时在两个不同的 Worktree 中 Checkout&lt;/strong&gt;。如果你试图在第二个 Worktree 切换到已经被占用的分支，&lt;code&gt;Git&lt;/code&gt; 会直接阻挡并抛出错误信息。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;强制删除 Worktree 会失去尚未 Commit 的变更&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;只要掌握好这些特性与原则，就能避免踩坑。&lt;/p&gt;
&lt;h2 id=&#34;结论&#34;&gt;结论
&lt;/h2&gt;&lt;p&gt;通过 &lt;code&gt;Git Worktree&lt;/code&gt;，我们可以彻底告别混乱的分支切换与 &lt;code&gt;git stash&lt;/code&gt; 流程，实现真正的多线程开发。&lt;/p&gt;
&lt;p&gt;下次不管是遇到紧急 Bug 需要修复、同时推进多个功能，还是指派任务给 &lt;code&gt;AI Agent&lt;/code&gt; 协助写代码，不妨试着开一张新的工作桌吧！&lt;/p&gt;
&lt;!--adsense--&gt;
&lt;h2 id=&#34;reference&#34;&gt;Reference
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://git-scm.com/docs/git-worktree&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Git - git-worktree Documentation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        
    </channel>
</rss>
