Cách Dùng Git Worktree Quản Lý Nhiều Nhánh Song Song

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.

Sơ đồ Git branches merge minh họa việc hợp nhất nhánh

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ên main. Tạo worktree mới cho main, 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.

Sơ đồ Git branches two forks and merge minh họa phân nhánh

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.

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

Top 15 Extension VS Code Năng Suất Cho Lập Trình Viên

Khi nói đến trình soạn thảo mã phổ biến nhất hiện nay, Visual Studio Code (VS Code) luôn đứng đầu nhờ hệ sinh thái extension phong phú. Với hơn 60.000…

Xem thêm

Caddy Web Server: Tự Động HTTPS Với Config Đơn Giản

NixOS: Quản Lý Hệ Thống Khai Báo Kiểu Functional Trên Linux NixOS là một phân phối Linux độc đáo sử dụng ngôn ngữ khai báo Nix để quản lý toàn…

Xem thêm

Cách thiết lập môi trường phát triển Docker trên macOS

Trong bối cảnh công nghệ phát triển nhanh chóng, cách thiết lập môi trường phát triển docker trên macos trở thành chủ đề nóng hổi thu hút sự quan tâm…

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