Làm chủ Jujutsu (jj): Hệ thống quản lý phiên bản an toàn và thông minh hơn Git

Git tutorial - IT technology blog
Git tutorial - IT technology blog

Tại sao mình chọn Jujutsu thay vì trung thành tuyệt đối với Git?

Hãy tưởng tượng kịch bản này: 2 giờ sáng, bạn đang fix một bug logic nghiêm trọng. Áp lực khiến bạn gõ nhầm lệnh git reset --hard khi chưa kịp commit. Với Git, 4 tiếng code miệt mài có thể bốc hơi ngay lập tức nếu bạn chưa git add vào index. Đó là một cảm giác cực kỳ tồi tệ.

Sau sự cố đó, mình nhận ra Git đôi khi quá khắt khe và dễ gây mất dữ liệu nếu thao tác sai. Mình cần một công cụ bao dung hơn, cho phép sai và sửa sai dễ dàng. Đó là lý do mình chuyển sang Jujutsu (jj).

Jujutsu là hệ thống quản lý phiên bản (VCS) thế hệ mới chạy trực tiếp trên nền tảng Git. Bạn vẫn dùng repo cũ, vẫn push code lên GitHub cho đồng nghiệp, nhưng trải nghiệm làm việc cá nhân lại mượt mà hơn hẳn. Sau 3 tháng áp dụng cho workflow cá nhân trong team 8 người, mình gần như không còn tốn giây phút nào để loay hoay khôi phục code do gõ nhầm lệnh.

Những cải tiến thực tế giúp bạn “dễ thở” hơn

  • Tạm biệt Staging Area: Bạn không cần git add nữa. Mọi thay đổi trong thư mục làm việc luôn được tự động coi là một commit đang thực hiện.
  • Hệ thống Operations Log (Ops Log): Mỗi lệnh bạn gõ đều được lưu lịch sử. Lỡ tay xóa nhầm branch hay rebase sai? Chỉ cần jj op undo. Nó hoạt động như nút Ctrl+Z cho toàn bộ lịch sử Git của bạn.
  • Conflict không còn là rào cản: Trong Git, conflict buộc bạn phải dừng lại để giải quyết. Với Jujutsu, bạn có thể commit cả file đang conflict, push lên cho team xem hoặc để đó xử lý sau mà không bị chặn workflow.

Cài đặt Jujutsu trong 1 phút

Được viết bằng Rust, Jujutsu có tốc độ thực thi rất ấn tượng. Bạn có thể cài đặt nhanh qua Cargo hoặc các trình quản lý gói phổ biến tùy theo hệ điều hành.

# Dành cho Rust/Cargo
cargo install --locked --bin jj jujutsu

# macOS (Homebrew)
brew install jj

# Windows (Scoop)
scoop install jj

Kiểm tra cài đặt bằng lệnh jj --version. Nếu terminal trả về phiên bản, bạn đã sẵn sàng để tạm biệt những rắc rối như “detached HEAD” của Git.

Cấu hình để bắt đầu làm việc

Khác với file .gitconfig truyền thống, Jujutsu sử dụng định dạng TOML hiện đại. Bạn cần khai báo thông tin cá nhân tại file config (thường nằm ở ~/.config/jj/config.toml trên Linux/macOS).

[user]
name = "Tên của bạn"
email = "[email protected]"

[ui]
# Chọn editor để viết commit message
default-editor = "nvim" 

Sử dụng song song với dự án Git hiện có

Bạn không cần phải chuyển đổi toàn bộ dự án sang định dạng mới. Jujutsu có thể chạy song song trên thư mục Git hiện tại của bạn.

# Chuyển vào thư mục dự án Git
jj git init --colocated

Tham số --colocated cực kỳ hữu ích. Nó cho phép bạn dùng lệnh gitjj xen kẽ. Mọi thay đổi bên phía jj sẽ tự động đồng bộ vào thư mục .git ẩn.

Workflow thực tế: Tự động hóa mọi thao tác

Khi bạn sửa file main.py, Jujutsu đã tự tạo sẵn một “working-copy commit”. Bạn không cần gõ lệnh add hay commit liên tục để lưu vết tạm thời nữa.

# Xem sơ đồ cây trực quan
jj log

Màn hình sẽ hiển thị sơ đồ cây rất rõ ràng. Commit hiện tại được đánh dấu bằng ký tự @. Khi hoàn thành task, bạn chỉ cần “chốt” nó lại:

# Đóng dấu commit và tạo task mới
jj commit -m "Fix logic bug found at 2AM"

Xử lý Conflict: Linh hoạt và chủ động

Đây là tính năng tiết kiệm cho mình khoảng 15-20 phút mỗi khi merge các nhánh phức tạp. Thay vì bắt bạn fix ngay, Jujutsu lưu trạng thái conflict trực tiếp vào commit.

# Merge hai nhánh có xung đột
jj merge branch-a branch-b

# Xem trạng thái
jj status

# Bạn có thể commit file conflict này và đi uống cà phê, 
# quay lại sửa sau mà không lo hỏng repo.

Khả năng phục hồi vô hạn với Operations Log

Đây chính là “phao cứu sinh” thực sự. Mọi thao tác làm thay đổi cấu trúc repo như rebase, merge hay abandon đều được ghi lại chi tiết.

# Kiểm tra các hành động vừa thực hiện
jj op log

Kết quả hiển thị minh bạch:

@  q7w8e9r0 (2023-10-27 02:15:00) commit
│  args: jj commit -m "Update database schema"
◉  a1b2c3d4 (2023-10-27 02:10:00) rebase
│  args: jj rebase -s dev -d main

Nếu nhận ra lệnh rebase lúc 2:10 sáng là một sai lầm, bạn chỉ cần một lệnh duy nhất để quay ngược thời gian:

jj op undo a1b2c3d4

Toàn bộ repo sẽ trở về trạng thái hoàn hảo trước khi lệnh đó thực thi. Không cần tra cứu git reflog phức tạp hay lo mất commit hash.

Lời khuyên cho workflow chuyên nghiệp

Dù Jujutsu rất mạnh, bạn vẫn nên dùng jj git push để đẩy code lên remote. Đồng nghiệp sẽ nhận được các commit Git tiêu chuẩn như bình thường. Họ sẽ không hề biết bạn đang dùng một công cụ khác, chỉ thấy lịch sử commit của bạn luôn sạch sẽ và ít lỗi.

Nếu bạn đã quá mệt mỏi với git stash hay ám ảnh mỗi khi merge conflict, hãy thử cài đặt Jujutsu ngay hôm nay. Đây không chỉ là một công cụ mới, mà là cách để bạn làm việc an tâm hơn và bớt áp lực hơn.

Share: