
Git Worktree là gì
Bạn đang phát triển tính năng feature/A, rồi hotfix cấp bách từ branch main chen ngang. Thông thường bạn phải stash, checkout, sau đó quay lại và restore. git worktree giải quyết vấn đề này — cho phép checkout nhiều branch cùng lúc vào các thư mục riêng biệt.
Theo Git documentation, worktree tạo ra các working directory riêng biệt, mỗi cái liên kết với cùng một repository. Mỗi worktree có branch riêng, working directory riêng, và bạn có thể làm việc trên cả hai đồng thời.
Cách dùng Git Worktree cơ bản

Lệnh cơ bản để tạo worktree:
# Tạo worktree mới từ branch feature/x
git worktree add ../project-feature-x feature/x
# Hoặc tạo branch mới + worktree cùng lúc
git worktree add -b feature/y ../project-feature-y main
Sau lệnh này, bạn có 2 thư mục:
project/— chứa branch cũ (VD: đang code feature/A)project-feature-x/— chứa branch feature/x
Mở 2 terminal, mỗi cái cd vào 1 thư mục, code song song mà không cần checkout liên tục.
Lệnh quản lý worktree
# Liệt kê tất cả worktree đang active
git worktree list
# Xóa worktree không còn dùng
git worktree remove ../project-feature-x
# Move worktree sang chỗ khác
git worktree move ../project-feature-x ../old-feature-x
Lưu ý về .git folder
Mỗi worktree có file .git riêng (không phải folder), trỏ về shared .git/worktrees/ trong repo gốc. Config local, stash, và reflog được chia sẻ — nên stash trong worktree này sẽ xuất hiện ở worktree kia.
Workflow thực tế: Hotfix + Feature song song
# Bạn đang code feature/auth ở thư mục chính
# Cần hotfix cấp bách trên main
git worktree add ../project-hotfix main
# cd vào hotfix, sửa, commit, push
cd ../project-hotfix
git commit -am "hotfix: fix login crash"
git push origin main
# Quay lại feature như bình thường
cd ../project
git merge main # feature giờ có hotfix

So sánh worktree vs stash vs branch thông thường
| Kỹ thuật | Switch time | Parallel work | Cleanup |
|---|---|---|---|
git checkout |
Medium | Không | Dễ |
git stash |
Fast | Không | Rủi ro quên apply |
git worktree |
0 (đồng thời) | Có | Phải remove thủ công |
Best Practices
- Đặt tên worktree rõ ràng:
../repo-feature-x, không phải../tmp - Xóa worktree sau khi merge:
git worktree removeđể tránh clutter - Không push từ worktree: worktree là cho local development, CI/CD vẫn dùng branch chính
- Monitor disk: mỗi worktree có full copy working files, nhiều worktree = nhiều dung lượng
- Dùng cho hotfix + review: tách review sang worktree, không cần disrupt work hiện tại
Git worktree là công cụ ít developer biết đến nhưng cực kỳ hữu ích khi bạn cần context-switch liên tục. Đặc biệt hiệu quả khi review PR: checkout PR vào worktree, xem xong xóa đi, không ảnh hưởng branch đang làm việc.
Nguồn tham khảo: Git Worktree Documentation, Atlassian Git Tutorials
