Git Worktree: Làm việc nhiều nhánh cùng lúc không cần stash

Git worktree là tính năng ít được nhắc đến nhưng cực kỳ mạnh mẽ, cho phép bạn làm việc với nhiều nhánh Git cùng lúc trong các thư mục riêng biệt — mà không cần stash, không cần đóng dở linh tinh. Thay vì checkout qua lại giữa các nhánh, bạn có thể có 2-3 thư mục working tree khác nhau, mỗi thư mục đang ở một nhánh khác nhau, và chỉ cần mở thêm một terminal.

Tại sao cần worktree?

Tình huống quen thuộc: bạn đang code feature A, bỗng có bug production cần hotfix ngay trên main. Bình thường bạn phải git stash hoặc git commit dở, rồi checkout sang main, fix xong rồi lại checkout về feature/a. Với worktree, bạn chỉ cần thêm một thư mục mới trỏ sang main mà không ảnh hưởng gì đến thư mục hiện tại đang code feature/a.

Sơ đồ so sánh nhánh Git với worktree: hai thư mục riêng biệt, mỗi thư mục đang checkout một nhánh khác nhau

Cú pháp cơ bản

# Thêm worktree mới cho nhánh existing
git worktree add /đường/dẫn/thư-mục-mới <tên-nhánh>

# Thêm worktree mới và tạo nhánh mới
git worktree add /đường/dẫn/thư-mục-mới -b <tên-nhánh-mới>

# Liệt kê tất cả worktree
git worktree list

# Xóa worktree
git worktree remove /đường/dẫn/thư-mục-mới

Ví dụ thực tế:

# Thư mục project gốc đang ở nhánh feature/login
cd ~/projects/myapp
git status  # on branch feature/login

# Thêm worktree cho hotfix
git worktree add ~/projects/myapp-hotfix main

# Bây giờ bạn có 2 thư mục:
# ~/projects/myapp          -> feature/login
# ~/projects/myapp-hotfix   -> main

# Fix bug xong, commit ở thư mục hotfix
cd ~/projects/myapp-hotfix
git commit -am "hotfix: fix null pointer on user login"

# Merge xong, xóa worktree hotfix
cd ~/projects/myapp
git merge main
git worktree remove ~/projects/myapp-hotfix

Các kịch bản sử dụng thực tế

  • Hotfix production: Giữ nguyên progress feature A, mở thêm thư mục main để fix bug nhanh.
  • Code review + fix: Thư mục 1 xem PR của đồng nghiệp, thư mục 2 tiếp tục code feature.
  • Multi-platform build: Một worktree chạy server, một chạy mobile app nếu repo monorepo.
  • Testing: Kiểm tra tác động merge bằng cách checkout branch mục tiêu vào worktree mới mà không rời thư mục chính.

Màn hình VS Code hiển thị hai thư mục Git branch cùng mở, minh họa quy trình làm việc song song

Best practices và lưu ý

  • Không đổi tên/move thư mục worktree sau khi tạo — Git lưu trữ absolute path trong .git/worktrees, move thư mục sẽ khiến Git mất track.
  • Mỗi worktree có thư mục .git riêng (thực chất là file text chứa đường dẫn thư mục gốc), nên tránh xóa thư mục gốc khi còn worktree phụ thuộc.
  • Worktree trên cùng commit hash — khi pull ở thư mục gốc, các worktree phụ vẫn ở commit cũ. Cần git worktree list --porcelain kiểm tra.
  • Tên thư mục nên rõ ràng: project-hotfix-20250821, project-feature-api-v2 thay vì tmp.
  • Dọn dẹp định kỳ: git worktree prune xóa các worktree bị mất (thư mục đã xóa nhưng Git vẫn ghi nhận).

So sánh worktree vs alternatives

Phương pháp Ưu điểm Nhược điểm
git stash + checkout Không cần disk thêm Mất context, lỡ code chưa commit, lộn xộn khi hoán đổi nhiều
git clone repo mới Cách thủ công dễ hiểu Clone lại 500MB mỗi lần, thêm remote phức tạp, disk lãng phí
git worktree Nhanh, shared object DB, không cần stash, context riêng biệt Không di chuyển được thư mục sau khi tạo, tốn disk cho large build
IDE multi-branch window Giao diện trực quan Phụ thuộc IDE, không có terminal riêng, khó quản lý nhiều concurrent

Hai cửa sổ terminal song song đang chạy git status ở hai nhánh khác nhau, minh họa workflow Git worktree

Kết luận

Git worktree là công cụ tối ưu cho developer nào thường xuyên phải nhảy giữa nhiều nhánh cùng lúc — đặc biệt khi làm việc với hotfix, code review, hoặc monorepo. Bạn chỉ cần dùng 2-3 lệnh cơ bản git worktree addgit worktree remove mà không cần patch thêm tool hay plugin. Tiết kiệm thời gian checkout, không còn stash rồi quên apply, và quan trọng nhất: không bao giờ đánh mất context của feature đang code dở.

Git Worktree Documentation, Git Tools – Advanced Merging

Tôi là một lập trình viên IOS. Code chính là IOS nhưng thỉnnh thoảng vẫn đá sang Android hoặc web. Mặc dù không quá thông thạo nhưng tôi sẽ chia sẻ những kiến thức mà mình đã tìm hiểu, áp dụng qua.

Bài viết liên quan

Database Index thực tế: B-tree, Hash, GIN, BRIN khi nào dùng cái nào

Index trong database là gì? Database index giống như mục lục của sách: giúp database engine tìm dòng nhanh mà không cần quét toàn bộ table. Tuy nhiên, mỗi loại…

Xem thêm

SwiftUI vs Flutter: Chọn framework nào cho app đa nền 2025?

SwiftUI vs Flutter: Chọn framework nào cho app đa nền 2025? SwiftUI và Flutter là hai framework hàng đầu cho phát triển ứng dụng đa nền tảng hiện nay. SwiftUI…

Xem thêm

C++ là gì? Tổng quan ngôn ngữ lập trình hệ thống hiệu năng cao

C++ là gì? Tổng quan ngôn ngữ lập trình hệ thống hiệu năng cao C++ là ngôn ngữ lập trình đa năng, hiệu năng cao, được sử dụng rộng rãi…

Xem thêm
0 0 đánh giá
Article Rating
Theo dõi
Thông báo của
guest
0 Comments
Cũ nhất
Mới nhất Được bỏ phiếu nhiều nhất