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:

  1. Chỉnh sửa online: Truy cập hello.txt trên GitHub, sửa nội dung và thực hiện commit trực tiếp trên nhánh master.
  2. 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.

  1. 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
  1. 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.

Điều hướng chuỗi bài viết<< Bài 6: Git Remote – Kết Nối Với GitHub

Thông tin nổi bật

Sự kiện phát trực tiếp​

Event Thumbnail

Báo cáo quan trọng

Article Thumbnail
Article Thumbnail

Sự kiện đang hiện hành

Chia sẻ bài viết:
Theo dõi
Thông báo của
0 Góp ý
Được bỏ phiếu nhiều nhất
Mới nhất Cũ nhất
Phản hồi nội tuyến
Xem tất cả bình luận

Tiêu điểm chuyên gia