
Git worktree là tính năng ít được biết đến nhưng vô cùng hữu ích, cho phép một repository Git đăng ký nhiều thư mục làm việc riêng biệt cùng lúc. Thay vì liên tục checkout, stash hay clone thêm bản sao, bạn có thể mở song song nhiều nhánh trong các thư mục khác nhau, mỗi nhánh một workspace độc lập nhưng vẫn dùng chung một lịch sử commit.
Git worktree là gì?
Git worktree tạo ra các linked working tree gắn với cùng một repository. Mỗi worktree có một thư mục làm việc riêng, index riêng và nhánh đang checkout riêng, nhưng tất cả chia sẻ chung thư mục .git chính. Nhờ đó dữ liệu object được lưu một lần, tiết kiệm dung lượng ổ cứng so với việc clone nhiều bản.

Khi nào nên dùng worktree?
Worktree phát huy sức mạnh trong các tình huống làm việc đa nhiệm điển hình sau đây:
- Sửa bug khẩn cấp: Đang phát triển feature trên nhánh
feature-auth, bỗng có bug nghiêm trọng trênmain. Tạo worktree mới chomain, fix ngay mà không phải đụng tới code feature đang dở. - Review code: Mở worktree cho nhánh pull request của đồng nghiệp, chạy thử và review thoải mái trong khi vẫn code nhánh của mình.
- Chạy test song song: Chạy test suite ở nhánh release trong khi tiếp tục phát triển ở nhánh chính, không lo test làm thay đổi workspace.
- So sánh nhánh: Mở hai thư mục của hai nhánh cạnh nhau, so sánh trực quan bằng IDE mà không cần thao tác Git phức tạp.
Các lệnh worktree cơ bản
Bộ lệnh worktree gọn gàng và dễ nhớ, bắt đầu bằng lệnh add để tạo worktree mới:
# Tạo worktree cho nhánh đã tồn tại
git worktree add ../feature-y feature-y
# Tạo nhánh mới từ main và mở worktree
git worktree add ../hotfix-bug -b hotfix-bug main
# Liệt kê tất cả worktree của repository
git worktree list
# Xóa worktree sau khi hoàn thành
git worktree remove ../feature-y
# Dọn dẹp các worktree còn ghi thiếu sót
git worktree prune
Lưu ý rằng một nhánh chỉ có thể được checkout trong một worktree tại một thời điểm. Nếu muốn mở lại nhánh đó ở nơi khác, bạn cần xóa worktree cũ trước hoặc dùng tùy chọn di chuyển.
Quy trình làm việc thực tế
Ví dụ cụ thể: bạn đang code feature đăng nhập ở thư mục project với nhánh feature-auth. Đột nhiên team phát hiện lỗi đăng nhập trên production cần sửa gấp:
# Tạo worktree riêng cho nhánh hotfix từ main
git worktree add ../project-hotfix -b hotfix-login main
# Vào thư mục mới, sửa lỗi, commit và push
cd ../project-hotfix
# ... sửa code ...
git add .
git commit -m "Fix login session validation"
git push origin hotfix-login
# Xóa worktree sau khi merged
cd ..
git worktree remove ../project-hotfix
Toàn bộ quá trình không hề ảnh hưởng tới workspace project đang code feature. Sau khi hotfix xong, bạn tiếp tục làm việc với feature-auth ngay lập tức, không cần stash, không cần clone, không mất bất kỳ thay đổi nào.

So sánh worktree và clone nhiều bản
| Tiêu chí | Clone nhiều bản | Git worktree |
|---|---|---|
| Dung lượng ổ cứng | Gấp N lần lịch sử Git | Chỉ một bản lịch sử dùng chung |
| Fetch đối tượng mới | Phải fetch từng bản | Tự động dùng chung, fetch một lần |
| Nhánh chưa commit | Mỗi bản độc lập hoàn toàn | Phải commit hoặc stash trước khi checkout nơi khác |
| Thao tác quản lý | Quản lý remote riêng | git worktree list một nơi |
| Dọn dẹp | Xóa thư mục thủ công | git worktree remove sạch sẽ |
Mẹo nâng cao với worktree
Worktree tạm cho thử nghiệm
Tạo worktree từ một commit bất kỳ để chạy thử nghiệm mà không ảnh hưởng nhánh chính: git worktree add --detach ../experiment . Sau khi xong, xóa worktree là mọi thứ trở lại nguyên trạng.
Khóa worktree
Lệnh git worktree lock ngăn Git tự động dọn dẹp worktree đang quan trọng, tránh mất mát dữ liệu khi lỡ tay remove.
Hỗ trợ từ IDE
VS Code cho phép mở nhiều thư mục worktree trong cùng một cửa sổ multi-root, JetBrains IDE cũng nhận diện worktree và hiển thị nhánh tương ứng rõ ràng.
Lưu ý khi sử dụng
- Mỗi worktree có file untracked riêng, nên .gitignore vẫn có tác dụng nhưng cần kiểm tra cẩn thận.
- Không nên tạo quá nhiều worktree cùng lúc, mỗi worktree mở trong IDE tốn RAM và tài nguyên; mức 2-4 worktree là hợp lý.
- Chỉ có một worktree gọi là main worktree (thư mục gốc lúc clone), các worktree khác là linked worktree.
- Khi xóa nhánh, nhớ xóa hoặc prune worktree liên quan để tránh lỗi không mong muốn.
Kết luận
Git worktree là công cụ mạnh mẽ giúp lập trình viên làm việc đa nhiệm hiệu quả mà không rối loạn lịch sử commit. Chỉ với vài lệnh cơ bản, bạn xử lý được hotfix khẩn cấp, review code song song và chạy test độc lập. Tài liệu chính thức tại git-scm.com cung cấp đầy đủ chi tiết, và bạn có thể bắt đầu ngay hôm nay với lệnh git worktree add đầu tiên.
