Giới thiệu
Trong môi trường phát triển phần mềm, lịch sử commit sạch sẽ và có cấu trúc giúp việc review code, debug và triển khai trở nên dễ dàng hơn. Git rebase interactive (còn gọi là git rebase -i) là công cụ mạnh mẽ cho phép bạn chỉnh sửa, gộp, hoặc loại bỏ các commit cũ mà không làm thay đổi nội dung cuối cùng của nhánh. Bài viết này sẽ hướng dẫn chi tiết cách thực hiện rebase interactive, kèm các lưu ý thực tiễn để tránh rủi ro.
Khi nào nên dùng rebase interactive
Rebase interactive thích hợp trong các tình huống sau:
- Bạn muốn gộp (squash) nhiều commit nhỏ thành một commit lớn có thông điệp mô tả đầy đủ.
- Cần đổi thứ tự các commit để các thay đổi phụ thuộc được đặt trước.
- Phát hiện một commit chứa lỗi và muốn chỉnh sửa nội dung hoặc thay đổi thông điệp trước khi đẩy lên remote.
- Loại bỏ các commit không cần thiết (ví dụ: commit thử nghiệm, debug).
Các bước thực hiện rebase interactive
Bước 1: Kiểm tra trạng thái hiện tại
Trước khi bắt đầu, hãy chắc chắn rằng không có thay đổi chưa commit trên nhánh hiện tại. Sử dụng lệnh:
git status
Nếu có thay đổi chưa commit, bạn có thể git stash hoặc commit lại trước.
Bước 2: Xác định điểm bắt đầu rebase
Giả sử bạn muốn chỉnh sửa 5 commit gần nhất trên nhánh feature/login. Dùng lệnh:
git checkout feature/login
git rebase -i HEAD~5
Lệnh trên sẽ mở trình soạn thảo mặc định (thường là Vim) với danh sách 5 commit gần nhất.
Bước 3: Chỉnh sửa danh sách commit
Trong trình soạn thảo, mỗi dòng có dạng:
pick a1b2c3d Thêm giao diện đăng nhập
Bạn có thể thay đổi từ khóa pick thành:
reword– sửa thông điệp commit.edit– dừng lại để chỉnh sửa nội dung commit.squash– gộp commit hiện tại vào commit phía trên.fixup– tương tựsquashnhưng bỏ qua thông điệp.drop– loại bỏ commit.
Ví dụ, để gộp hai commit cuối thành một và sửa thông điệp của commit thứ ba, bạn có thể viết:
pick a1b2c3d Thêm giao diện đăng nhập pick d4e5f6g Thêm validation reword h7i8j9k Cập nhật logic kiểm tra squash k1l2m3n Sửa lỗi CSS squash n4o5p6q Sửa lỗi JS
Bước 4: Thực hiện các thao tác được chỉ định
Sau khi lưu và thoát trình soạn thảo, Git sẽ thực hiện các bước theo thứ tự. Nếu bạn đã đặt reword, Git sẽ mở lại một cửa sổ để bạn nhập thông điệp mới. Nếu đặt edit, quá trình rebase sẽ tạm dừng, cho phép bạn thay đổi nội dung commit bằng các lệnh như git add và git commit --amend, sau đó tiếp tục bằng git rebase --continue.
Bước 5: Xử lý xung đột (nếu có)
Trong quá trình rebase, Git có thể báo xung đột. Khi gặp xung đột, thực hiện:
git status
Giải quyết xung đột trong các file, sau đó đánh dấu đã giải quyết:
git add <file>
Tiếp tục rebase:
git rebase --continue
Nếu muốn hủy bỏ toàn bộ quá trình và quay lại trạng thái ban đầu, dùng:
git rebase --abort
Lưu ý quan trọng
- Không thực hiện rebase interactive trên các nhánh đã được đẩy lên remote và được người khác sử dụng. Việc thay đổi lịch sử sẽ gây lỗi đồng bộ cho đồng nghiệp.
- Luôn tạo backup branch trước khi thực hiện các thao tác nguy hiểm:
git branch backup/feature-login
git log --oneline để kiểm tra lịch sử sau khi hoàn thành, đảm bảo các commit đã được sắp xếp đúng.Kết luận
Git rebase interactive là công cụ không thể thiếu cho bất kỳ developer nào muốn duy trì lịch sử commit có chất lượng. Khi nắm vững quy trình và các tùy chọn, bạn sẽ giảm thiểu rủi ro khi hợp nhất nhánh, đồng thời tạo ra một lịch sử dễ đọc cho mọi thành viên trong team. Tham khảo khóa học "Khóa học Git & Git Flow thực chiến" tại đây.








