Làm quen với git-absorb trong 5 phút
Đi làm dự án thực tế, chắc hẳn bạn chẳng lạ gì cảnh phải dùng git rebase -i để gộp các commit vụn vặt như “fix typo” hay “update logic” vào commit chính. Quy trình cũ thường rất cồng kềnh: tìm mã hash của commit cũ, gõ git commit --fixup <hash>, rồi mới autosquash. Chỉ riêng việc copy-paste mã hash thôi đã đủ thấy nản rồi.
git-absorb là giải pháp giúp bạn bỏ qua những bước thủ công đó. Thay vì bắt bạn tự tìm, nó sẽ tự đối chiếu những thay đổi bạn vừa thực hiện với lịch sử commit gần đây. Sau đó, nó tự “nhét” (absorb) code vào đúng commit gốc đã sinh ra đoạn code đó.
Cách dùng cực nhanh:
- Sửa code để fix lỗi hoặc bổ sung thay đổi.
- Stage file bằng lệnh
git add .. - Gõ
git absorb. - Chạy
git rebase -i --autosquash @{u}để hoàn tất việc dọn dẹp.
# Ví dụ thực tế xử lý trong 10 giây
$ git add src/services/auth.py
$ git absorb
# Tool sẽ tự tìm commit cũ và tạo fixup commit ngay lập tức
$ git rebase -i --autosquash @{u}
Tại sao bạn nên dùng git-absorb thay vì cách truyền thống?
Thử tưởng tượng: Senior vừa “soi” ra một lỗi nhỏ ở commit đầu tiên, trong khi Pull Request (PR) của bạn đã chồng chất tận 10-15 commit khác nhau. Việc lục lại lịch sử để tìm đúng dòng code đó thuộc về commit nào cực kỳ tốn thời gian và dễ nhầm lẫn.
Về cơ bản, git-absorb hoạt động thông minh nhờ cơ chế tương tự git blame. Nó quét qua từng dòng bạn vừa stage trong index, xác định xem dòng đó được sửa đổi lần cuối ở commit nào trong phạm vi HEAD..@{u}. Nếu xác định được duy nhất một commit đích an toàn, nó sẽ tự tạo một fixup! commit tương ứng.
Những điểm cộng đáng giá:
- Năng suất hơn: Tiết kiệm khoảng 2-3 phút cho mỗi lần dọn dẹp PR so với cách gõ hash thủ công.
- Độ chính xác tuyệt đối: Loại bỏ tình trạng fixup nhầm commit dẫn đến conflict tung tóe khi rebase.
- Ghi điểm với Reviewer: Giúp lịch sử commit của bạn luôn “sạch bong” trước khi gửi đi. Reviewer sẽ dễ thở hơn khi đọc từng commit rành mạch thay vì một đống commit “fix typo” rác.
Cài đặt git-absorb
Công cụ này được viết bằng Rust nên cực kỳ nhẹ và nhanh. Bạn có thể cài qua cargo hoặc các trình quản lý gói quen thuộc.
Trên macOS:
brew install git-absorb
Trên Linux (Ubuntu/Debian):
sudo apt install git-absorb
# Hoặc dùng cargo nếu distro không có sẵn
cargo install git-absorb
Trên Windows:
Sau khi cài Rust và Cargo, bạn chỉ cần chạy:
cargo install git-absorb
Quy trình làm việc thực tế
Mình thường dùng combo này hàng ngày để PR luôn chỉn chu. Giả sử bạn đang làm tính năng Login và có 3 commit: 1. Init Database, 2. Add Auth Service, 3. Update UI.
Đột nhiên bạn thấy biến user_token ở commit số 1 bị đặt tên sai. Thay vì tạo commit mới kiểu “fix: rename variable”, hãy làm thế này:
- Sửa lại tên biến trong code cho đúng.
- Chạy
git add .. - Gõ
git absorb. Lúc này, tool tự hiểu thay đổi này thuộc về commit “Init Database” và tạo ngay một fixup commit nằm trên cùng. - Cuối cùng, chạy
git rebase -i --autosquash @{u}. Mọi thứ đã được sắp xếp sẵn, bạn chỉ cần nhấn Save là xong.
Lưu ý: git-absorb chỉ nhìn thấy những gì bạn đã git add. Nếu quên stage file, nó sẽ báo không có gì để xử lý.
Kinh nghiệm xương máu: Đừng để Force Push làm hại bạn
Dùng git-absorb xong và rebase, bạn bắt buộc phải force push vì lịch sử đã thay đổi. Để an toàn, hãy luôn dùng git push --force-with-lease thay vì --force.
Lệnh này sẽ kiểm tra xem có đồng nghiệp nào vừa push code mới lên branch đó trong khi bạn đang rebase hay không. Nếu có, nó sẽ chặn lại để bạn không ghi đè và làm mất code của người khác. Một thói quen nhỏ nhưng cứu bạn khỏi nhiều pha “mất mặt” với team.
Cá nhân mình thấy tool này cực kỳ hữu ích khi đang trong trạng thái “coding flow”. Đang làm việc này mà thấy lỗi ở chỗ kia, chỉ cần sửa nhanh, git add, git absorb là xong. Tâm trí bạn được giải phóng để quay lại ngay với logic chính mà không bị ngắt quãng.
Mẹo nâng cao cho dân chuyên
1. Thiết lập Alias để gõ nhanh hơn
Để tối ưu tốc độ, hãy thêm alias vào file .gitconfig:
[alias]
ab = absorb
ri = rebase -i --autosquash
Giờ đây, combo dọn dẹp thần thánh chỉ còn là git ab và git ri @{u}. Quá nhanh!
2. Giới hạn phạm vi quét
Mặc định tool quét ngược lại 10 commit. Nếu muốn tìm xa hơn, hãy chỉ định mốc cụ thể:
git absorb --base <commit-hash>
3. Khi nào git-absorb bó tay?
Nó không phải là vạn năng. Nếu một dòng code bạn sửa bị tranh chấp bởi quá nhiều commit khác nhau, tool sẽ báo lỗi “multi-candidate”. Trường hợp này khá hiếm nếu bạn chia nhỏ commit ngay từ đầu, nhưng nếu gặp, bạn vẫn phải ra tay rebase thủ công thôi.
Tổng kết
Sử dụng git-absorb là cách bạn nâng cấp tư duy làm việc: tập trung hoàn toàn vào code, để công cụ lo phần thủ tục Git rườm rà. Với các bạn Junior, việc làm chủ những tool nhỏ nhưng có võ này sẽ giúp bạn làm việc chuyên nghiệp và “pro” hơn hẳn trong mắt các đàn anh Senior.
Hãy thử cài và dùng ngay cho project hiện tại, đảm bảo bạn sẽ không bao giờ muốn quay lại cách rebase thủ công nữa đâu!

