<?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/vi/tags/git-worktree/</link>
        <description>Recent content in Git Worktree on Dev TLDRLSS</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>vi</language>
        <lastBuildDate>Sat, 08 Aug 2026 08:29:00 +0800</lastBuildDate><atom:link href="https://dev.tldrlss.com/vi/tags/git-worktree/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>Tại sao chuyển branch lại phải dùng git stash? Git Worktree là gì? Sự khác biệt giữa Git Worktree và Git Branch? Cách dùng Git Worktree xây dựng quy trình phát triển đa luồng hiệu quả</title>
        <link>https://dev.tldrlss.com/vi/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/vi/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 Tại sao chuyển branch lại phải dùng git stash? Git Worktree là gì? Sự khác biệt giữa Git Worktree và Git Branch? Cách dùng Git Worktree xây dựng quy trình phát triển đa luồng hiệu quả" /&gt;&lt;p&gt;Bạn đã bao giờ gặp tình huống này chưa? Bạn đang phát triển một tính năng mới phức tạp thì đột nhiên nhận được thông báo Bug khẩn cấp cần sửa ngay lập tức.&lt;/p&gt;
&lt;p&gt;Để chuyển branch, bạn đành phải miễn cưỡng chạy &lt;code&gt;git stash&lt;/code&gt; để cất phần code đang dở dang. Sửa Bug xong quay lại, bạn lại phải cẩn thận &lt;code&gt;git stash pop&lt;/code&gt;, thậm chí đôi khi còn gặp phải cơn ác mộng xung đột code (conflict).&lt;/p&gt;
&lt;p&gt;Thực ra &lt;code&gt;Git&lt;/code&gt; đã có sẵn một công cụ cực kỳ mạnh mẽ để giải quyết nỗi đau này từ lâu, đó chính là &lt;code&gt;Git Worktree&lt;/code&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Tạm biệt việc chuyển branch và Stash hỗn loạn, mở ra quy trình phát triển đa luồng với Worktree&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Bài viết này sẽ giúp bạn hiểu rõ cơ chế hoạt động cốt lõi và cách sử dụng thực tế của nó.&lt;/p&gt;
&lt;h2 id=&#34;git-worktree-và-git-branch-khác-nhau-như-thế-nào&#34;&gt;Git Worktree và Git Branch khác nhau như thế nào?
&lt;/h2&gt;&lt;p&gt;Để hiểu &lt;code&gt;Git Worktree&lt;/code&gt;, trước tiên chúng ta hãy làm rõ sự khác biệt giữa nó và &lt;code&gt;Git Branch&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Chúng ta có thể ví việc quản lý phiên bản giống như đọc một cuốn sách:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Commit&lt;/code&gt; là &lt;strong&gt;ấn bản / phiên bản của cuốn sách&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Branch&lt;/code&gt; là &lt;strong&gt;thẻ kẹp sách đánh dấu ở một trang&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Worktree&lt;/code&gt; là &lt;strong&gt;bàn làm việc giúp bạn trải cuốn sách ra&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Trong phương pháp truyền thống, chúng ta chỉ có duy nhất một bàn làm việc. Mỗi khi muốn chuyển thẻ kẹp sách, chúng ta phải dọn dẹp toàn bộ giấy tờ đang chỉnh sửa trên bàn hoặc cất vào ngăn kéo (chính là &lt;code&gt;git stash&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;Trong khi đó, &lt;code&gt;Git Worktree&lt;/code&gt; cho phép bạn sở hữu đồng thời nhiều &lt;strong&gt;bàn làm việc độc lập&lt;/strong&gt;.&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Tiêu chí so sánh&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;Khái niệm Workspace&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Dùng chung một thư mục làm việc vật lý&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;Sở hữu nhiều thư mục làm việc vật lý độc lập&lt;/strong&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Chi phí chuyển branch&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Cần commit, stash hoặc tạm lưu thay đổi&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;Không cần stash, chỉ cần chuyển thư mục là xong&lt;/strong&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Tính cô lập &amp;amp; an toàn&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;File chưa commit có thể gây xung đột hoặc sót lại&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;Thư mục cô lập hoàn toàn, thay đổi không ảnh hưởng nhau&lt;/strong&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Lịch sử hoạt động&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Dùng chung lịch sử Git Commit và Branch&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;Dùng chung lịch sử Git Commit và Branch&lt;/strong&gt;&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Branch hiện tại, Staging Area và các thay đổi chưa commit của mỗi Worktree đều hoàn toàn độc lập, nhưng chúng &lt;strong&gt;dùng chung toàn bộ lịch sử Commit và thông tin Branch&lt;/strong&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Branch là thẻ kẹp sách phiên bản, còn Worktree là bàn làm việc thực tế&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Nhờ đó, khi cần chuyển đổi nhiệm vụ, bạn chỉ cần mở một thư mục khác mà không làm ảnh hưởng đến trạng thái phát triển hiện tại.&lt;/p&gt;
&lt;!--adsense--&gt;
&lt;h2 id=&#34;làm-thế-nào-để-bắt-đầu-sử-dụng-git-worktree&#34;&gt;Làm thế nào để bắt đầu sử dụng Git Worktree?
&lt;/h2&gt;&lt;p&gt;Khi áp dụng &lt;code&gt;Git Worktree&lt;/code&gt; vào dự án thực tế, quy hoạch thư mục hợp lý sẽ giúp việc phát triển thuận lợi hơn.&lt;/p&gt;
&lt;p&gt;Bạn nên giữ thư mục dự án &lt;code&gt;git clone&lt;/code&gt; ban đầu làm trụ sở &lt;code&gt;main&lt;/code&gt; sạch sẽ, và đặt các thư mục Worktree mới tạo bên ngoài dự án (ví dụ &lt;code&gt;../my-app-worktrees&lt;/code&gt;), tránh lỗi công cụ phát triển quét thư mục đệ quy.&lt;/p&gt;
&lt;p&gt;Quy trình lệnh thường dùng như sau:&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Quy trình&lt;/th&gt;
          &lt;th&gt;Lệnh&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;1. Tạo Worktree mới đồng thời tạo branch mới&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. Xem danh sách tất cả Worktree hiện tại&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; đặc biệt phù hợp để quản lý các nhiệm vụ phát triển của &lt;code&gt;AI Agent&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Bạn có thể giao cho &lt;code&gt;AI Agent&lt;/code&gt; một thư mục Worktree độc lập để nó thoải mái sửa đổi và kiểm thử, trong khi lập trình viên có thể thực hiện review code và kiểm thử ở một Worktree khác.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Giao cho AI Agent một Worktree độc lập để việc phát triển AI và review của lập trình viên có thể xử lý song song&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Cả hai hoạt động trên các thư mục vật lý riêng biệt, vừa an toàn vừa rõ ràng.&lt;/p&gt;
&lt;h2 id=&#34;sau-khi-phát-triển-xong-thì-merge-và-dọn-dẹp-an-toàn-như-thế-nào&#34;&gt;Sau khi phát triển xong thì merge và dọn dẹp an toàn như thế nào?
&lt;/h2&gt;&lt;p&gt;Sau khi hoàn thành công việc trong Worktree độc lập, làm thế nào để gộp kết quả và dọn dẹp?&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Hãy nhớ một khái niệm quan trọng: Thư mục Worktree bản thân nó không cần merge, &lt;strong&gt;thứ thực sự cần merge là Branch&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Bạn chỉ cần quay lại thư mục bàn làm việc &lt;code&gt;main&lt;/code&gt;, chạy lệnh &lt;code&gt;git merge&lt;/code&gt; với branch tính năng tương ứng để hoàn tất tích hợp.&lt;/p&gt;
&lt;p&gt;Khi dọn dẹp, hãy tuân theo quy trình chuẩn 2 bước:&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Bước&lt;/th&gt;
          &lt;th&gt;Lệnh&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;1. Xóa thư mục vật lý 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. Xóa branch tính năng đã hoàn thành&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;Xóa thư mục Worktree trước, sau đó mới xóa Branch&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Hãy nhớ luôn dùng lệnh &lt;code&gt;git worktree remove&lt;/code&gt; để dọn dẹp, thay vì xóa thư mục thủ công trong trình quản lý tệp.&lt;/p&gt;
&lt;!--adsense--&gt;
&lt;h2 id=&#34;những-cạm-bẫy-thường-gặp-khi-sử-dụng-git-worktree-là-gì&#34;&gt;Những cạm bẫy thường gặp khi sử dụng Git Worktree là gì?
&lt;/h2&gt;&lt;p&gt;Mặc dù &lt;code&gt;Git Worktree&lt;/code&gt; rất tiện lợi, nhưng có một số điểm cần lưu ý tránh mắc lỗi.&lt;/p&gt;
&lt;h3 id=&#34;cạm-bẫy-1-thay-đổi-chưa-commit-sẽ-bị-mất&#34;&gt;Cạm bẫy 1: Thay đổi chưa commit sẽ bị mất
&lt;/h3&gt;&lt;p&gt;Mặc dù xóa Worktree không xóa Branch, nhưng nếu bạn còn thay đổi chưa commit trong thư mục đó, việc buộc xóa thư mục Worktree sẽ khiến các thay đổi đó biến mất hoàn toàn.&lt;/p&gt;
&lt;h3 id=&#34;cạm-bẫy-2-xung-đột-chiếm-dụng-branch&#34;&gt;Cạm bẫy 2: Xung đột chiếm dụng branch
&lt;/h3&gt;&lt;p&gt;Cơ chế bảo vệ của &lt;code&gt;Git&lt;/code&gt; &lt;strong&gt;không cho phép cùng một Branch được Checkout đồng thời ở hai Worktree khác nhau&lt;/strong&gt;. Nếu bạn cố chuyển sang branch đã bị chiếm dụng ở Worktree thứ hai, &lt;code&gt;Git&lt;/code&gt; sẽ chặn lại và báo lỗi.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Ép xóa Worktree sẽ làm mất các thay đổi chưa Commit&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Chỉ cần nắm vững các đặc tính và nguyên tắc này, bạn sẽ tránh được việc sập bẫy.&lt;/p&gt;
&lt;h2 id=&#34;kết-luận&#34;&gt;Kết luận
&lt;/h2&gt;&lt;p&gt;Nhờ có &lt;code&gt;Git Worktree&lt;/code&gt;, chúng ta có thể hoàn toàn chia tay với việc chuyển branch hỗn loạn và quy trình &lt;code&gt;git stash&lt;/code&gt;, đạt được sự phát triển đa luồng thực sự.&lt;/p&gt;
&lt;p&gt;Lần tới khi gặp Bug khẩn cấp, phát triển nhiều tính năng cùng lúc, hoặc giao nhiệm vụ lập trình cho &lt;code&gt;AI Agent&lt;/code&gt;, hãy thử mở một bàn làm việc mới nhé!&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>
