<?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/th/tags/git-worktree/</link>
        <description>Recent content in Git Worktree on Dev TLDRLSS</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>th</language>
        <lastBuildDate>Sat, 08 Aug 2026 08:29:00 +0800</lastBuildDate><atom:link href="https://dev.tldrlss.com/th/tags/git-worktree/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>ทำไมต้อง git stash ทุกครั้งที่สลับสาขา? Git Worktree คืออะไร? Git Worktree ต่างจาก Git Branch อย่างไร? วิธีใช้ Git Worktree สร้างกระบวนการพัฒนา Multi-thread ประสิทธิภาพสูง</title>
        <link>https://dev.tldrlss.com/th/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/th/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 สร้างกระบวนการพัฒนา Multi-thread ประสิทธิภาพสูง" /&gt;&lt;p&gt;คุณเคยเจอสถานการณ์แบบนี้ไหม? กำลังพัฒนารีเจอร์ใหม่ที่ซับซ้อน แต่จู่ๆ ก็มี Bug ด่วนเข้ามาที่ต้องแก้ไขทันที&lt;/p&gt;
&lt;p&gt;เพื่อสลับสาขา (Branch) คุณต้องจำใจใช้ &lt;code&gt;git stash&lt;/code&gt; เพื่อซ่อนโค้ดที่ทำค้างไว้ หลังจากแก้ Bug เสร็จและสลับกลับมา คุณต้องคอยระวังเมื่อใช้ &lt;code&gt;git stash pop&lt;/code&gt; ซึ่งบางครั้งอาจต้องเจอกับฝันร้ายของการขัดแย้งของโค้ด (Conflict)&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 ที่วุ่นวาย แล้วเริ่มต้นการพัฒนาแบบ Multi-thread ด้วย 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;แนวคิด Workspace&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;ต้องทำการ Commit, 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;ไฟล์ที่ยังไม่ได้ Commit อาจเกิดข้อขัดแย้งหรือค้างอยู่&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 และ Branch ร่วมกัน&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;แชร์ประวัติ Git Commit และ Branch ร่วมกัน&lt;/strong&gt;&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Branch ปัจจุบัน, Staging Area และไฟล์ที่ยังไม่ได้ Commit ของแต่ละ Worktree จะแยกออกจากกันโดยสิ้นเชิง แต่พวกมันจะ &lt;strong&gt;แชร์ประวัติ Commit และบันทึก Branch ทั้งหมดร่วมกัน&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 ใหม่พร้อมสร้าง Branch ใหม่&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;คุณสามารถมอบไดเรกทอรี Worktree ที่เป็นอิสระให้กับ &lt;code&gt;AI Agent&lt;/code&gt; เพื่อแก้ไขและทดสอบได้อย่างเต็มที่ ในขณะที่นักพัฒนาที่เป็นมนุษย์สามารถทำการตรวจสอบโค้ด (Review) และทดสอบในอีก Worktree หนึ่งได้&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;มอบ Worktree ที่เป็นอิสระให้ AI Agent เพื่อให้การพัฒนาด้วย 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; กับ Branch ฟีเจอร์ที่เกี่ยวข้องเพื่อเสร็จสิ้นการรวมโค้ด&lt;/p&gt;
&lt;p&gt;สำหรับการทำความสะอาด โปรดทำตามขั้นตอนมาตรฐาน 2 ขั้นตอน:&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. ลบ Branch ฟีเจอร์ที่เสร็จสมบูรณ์แล้ว&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-การเปลยนแปลงทยงไมได-commit-จะสญหาย&#34;&gt;กับดักที่ 1: การเปลี่ยนแปลงที่ยังไม่ได้ Commit จะสูญหาย
&lt;/h3&gt;&lt;p&gt;แม้ว่าการลบ Worktree จะไม่ลบ Branch แต่หากคุณยังมีการเปลี่ยนแปลงที่ไม่ได้ commit ในไดเรกทอรีนั้น การลบไดเรกทอรี Worktree แบบบังคับจะทำให้การเปลี่ยนแปลงเหล่านั้นสูญหายไปทันที&lt;/p&gt;
&lt;h3 id=&#34;กบดกท-2-ความขดแยงจากการยดครอง-branch&#34;&gt;กับดักที่ 2: ความขัดแย้งจากการยึดครอง Branch
&lt;/h3&gt;&lt;p&gt;กลไกการป้องกันของ &lt;code&gt;Git&lt;/code&gt; &lt;strong&gt;ไม่อนุญาตให้ Checkout Branch เดียวกันใน Worktree สองแห่งพร้อมกัน&lt;/strong&gt; หากคุณพยายามสลับไปยัง Branch ที่ถูกใช้งานอยู่แล้วใน 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; ได้อย่างสิ้นเชิง และบรรลุการพัฒนาแบบ Multi-thread ที่แท้จริง&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>
