Danh sách bài viết trong series Học Git cơ bản: làm chủ quản lý mã nguồn
- Bài 1: Khởi Đầu Với Git – Cài Đặt Và Cấu Hình Cơ Bản
- Bài 2: Khám Phá Kho Lưu Trữ – Tạo Và Khởi Động Repository
- Bài 3: Git Commit – Lưu Lại Mọi Thay Đổi
- Bài 4: Git history – Xem Lịch Sử Và Undo
- Bài 5: Git branch – Làm Việc Với Branch
- Bài 6: Git Remote – Kết Nối Với GitHub
- Bài 7: Hợp Tác Trong Git – Resolve Conflict
Giải quyết xung đột (Conflict) trong Git
Ở bài trước bạn đã biết đưa code lên Git repository, chính bây giờ code đã có thể dùng chung nên việc xung đột (conflict) là tình huống thường gặp khi chúng ta làm việc nhóm, xảy ra khi có hai hoặc nhiều thay đổi cùng tác động lên một vị trí trong cùng một tệp tin. Trong bài này, chúng ta sẽ cùng tìm hiểu cách nhận diện và xử lý xung đột một cách chuẩn xác.
1. Mô phỏng tình huống gây xung đột
Để hiểu rõ cách Git vận hành, chúng ta sẽ cùng tạo ra một tình huống xung đột giả định giữa phiên bản trên GitHub và máy cá nhân:
- Chỉnh sửa online: Truy cập
hello.txttrên GitHub, sửa nội dung và thực hiện commit trực tiếp trên nhánhmaster. - Chỉnh sửa local: Tại máy cá nhân, chúng ta tạo nhánh mới và sửa cùng dòng đó trong file
hello.txt:git checkout -b feature-test echo "Edited locally: Team B" >> hello.txt git add hello.txt git commit -m "Add Team B edit"
Lúc này, cả hai phiên bản (online và local) đều có sự thay đổi tại cùng một vị trí, sẵn sàng cho việc xảy ra xung đột khi gộp mã nguồn.
2. Nhận diện xung đột khi Merge
Chúng ta quay lại nhánh master, kéo mã nguồn mới nhất từ GitHub về và thực hiện hợp nhất nhánh feature-test:
git checkout master
git pull origin master
git merge feature-test
Git sẽ dừng quá trình merge và thông báo lỗi xung đột tại file hello.txt. Khi mở file này, chúng ta sẽ thấy các ký hiệu đánh dấu của Git:
Hello, Git!
<<<<<<< HEAD
Edited online: Team A
=======
Edited locally: Team B
>>>>>>> feature-test
- Từ
<<<<<<< HEADđến `=======`: Nội dung hiện có trên nhánh hiện tại (master). - Từ
=======đến `>>>>>>> feature-test`: Nội dung từ nhánh chúng ta đang muốn gộp vào (feature-test).
3. Các bước giải quyết xung đột
Thay vì lo lắng khi thấy các ký hiệu lạ, chúng ta chỉ cần thực hiện việc lựa chọn hoặc kết hợp các phiên bản theo ý muốn.
- Chỉnh sửa thủ công: Xóa các ký hiệu của Git và giữ lại nội dung cuối cùng chúng ta mong muốn:
Hello, Git!
Edited online: Team A
Edited locally: Team B
- Hoàn tất quá trình: Sau khi lưu file, chúng ta cần đánh dấu xung đột đã được giải quyết và thực hiện commit kết thúc việc merge:
git add hello.txt
git commit -m "Resolve merge conflict in hello.txt"
git push origin master
Sau khi hoàn tất, repository của chúng ta sẽ trở lại trạng thái sạch sẽ và đồng bộ.
4. Các biện pháp hạn chế xung đột
Dù xung đột là một phần tất yếu khi làm việc nhóm, chúng ta có thể giảm thiểu tần suất xảy ra bằng các thói quen tốt:
- Cập nhật thường xuyên: Luôn thực hiện
git pullđể lấy mã nguồn mới nhất trước khi bắt đầu chỉnh sửa. - Chia nhỏ tính năng: Sử dụng các nhánh riêng biệt cho từng tính năng hoặc bản sửa lỗi để tránh chồng chéo.
- Tăng cường giao tiếp: Trao đổi với đồng nghiệp khi làm việc trên cùng một tệp tin quan trọng.
Kinh nghiệm thực tế
- Sử dụng công cụ hỗ trợ: Các trình soạn thảo như VSCode cung cấp giao diện trực quan giúp việc chọn lọc phiên bản khi có conflict trở nên dễ dàng hơn.
- Kiểm tra biểu đồ lịch sử: Sử dụng lệnh
git log --graphđể có cái nhìn tổng quan về các luồng nhánh và điểm hợp nhất trong dự án. - Sao lưu định kỳ: Nếu chưa tự tin với lệnh merge, chúng ta có thể sao lưu các file quan trọng trước khi thực hiện thao tác.
Lời kết cho Series Học Git Cơ Bản
Đến đây là cũng hết rồi. Cảm ơn bạn đã đi cùng mình qua những bài chia sẻ và hoàn thành trọn vẹn series Học Git Cơ Bản. Từ những bước cài đặt đầu tiên đến việc làm chủ các thao tác phức tạp như quản lý nhánh và xử lý xung đột, bạn đã trang bị cho mình nền tảng vững chắc để làm việc chuyên nghiệp trong các dự án phần mềm.






