<?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/tags/git-worktree/</link>
        <description>Recent content in Git Worktree on Dev TLDRLSS</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh-tw</language>
        <lastBuildDate>Sat, 08 Aug 2026 08:29:00 +0800</lastBuildDate><atom:link href="https://dev.tldrlss.com/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/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/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>
