Giới thiệu về xung đột merge
Khi làm việc trong một dự án đa người, việc merge nhánh thường dẫn đến xung đột (conflict) nếu cùng một phần của file được chỉnh sửa trên các nhánh khác nhau. Xung đột không phải là lỗi, mà là cơ chế bảo vệ để người dùng quyết định cách hợp nhất thay đổi.
Quy trình phát hiện xung đột
Git sẽ tự động phát hiện xung đột khi thực hiện lệnh git merge hoặc git rebase. Khi có xung đột, quá trình dừng lại và các file bị ảnh hưởng sẽ được đánh dấu bằng các ký hiệu đặc biệt:
<!-- file example.txt --> <div>Version A</div> <<<<<< HEAD <div>Thay đổi từ nhánh develop</div> ======= <div>Thay đổi từ nhánh feature-x</div> >>>>>> feature-x </div>
Những dòng <<<<<< HEAD, =======, >>>>>> feature-x xác định phần nội dung của mỗi nhánh.
Bước 1: Kiểm tra danh sách file xung đột
Sử dụng lệnh sau để liệt kê các file đang có xung đột:
git status --short
Kết quả sẽ hiển thị các file với trạng thái UU (both modified).
Bước 2: Mở file và quyết định cách hợp nhất
Trong mỗi file, bạn cần chọn một trong ba cách:
- Giữ thay đổi của nhánh hiện tại (keep
HEAD). - Áp dụng thay đổi của nhánh được merge (keep
feature-x). - Kết hợp thủ công bằng cách viết lại nội dung sao cho đáp ứng yêu cầu nghiệp vụ.
Sau khi chỉnh sửa, xóa các ký hiệu <<<<<<, =======, >>>>>>.
Bước 3: Đánh dấu xung đột đã được giải quyết
Sau khi lưu lại, chạy lệnh:
git add file
hoặc dùng git add -u để thêm tất cả các file đã sửa.
Bước 4: Hoàn thành merge hoặc rebase
Nếu đang thực hiện merge, thực hiện:
git commit -m "Resolve merge conflict between develop and feature-x"
Đối với rebase, tiếp tục quá trình bằng:
git rebase --continue
Chiến lược phòng ngừa xung đột
Mặc dù không thể tránh hoàn toàn, bạn có thể giảm thiểu xung đột bằng một số thực hành:
- Thường xuyên sync nhánh: Pull và rebase nhánh feature lên
developtrước khi mở Pull Request. - Sử dụng quy tắc bảo vệ nhánh: Yêu cầu review và CI trước khi merge vào
mainhoặcdevelop. - Chia nhỏ commit: Mỗi commit nên tập trung vào một thay đổi logic, giúp công cụ tự động phát hiện xung đột dễ dàng hơn.
Kết luận
Hiểu rõ cách Git đánh dấu và giải quyết xung đột giúp bạn duy trì lịch sử commit sạch sẽ và giảm thời gian debug. Khi gặp xung đột, hãy tuân thủ quy trình kiểm tra, chỉnh sửa, và commit lại một cách có hệ thống.
Để nâng cao kỹ năng quản lý quy trình Git và Git Flow, Tham khảo khóa học "Khóa học Git & Git Flow thực chiến" tại đây.








