Skip to content

Thực hành: Giải quyết Merge Conflicts

🎯 Mục tiêu

🎯 Sau bài thực hành này, bạn sẽ:

  • Đọc và hiểu ý nghĩa các conflict markers
  • Biết chiến lược giải quyết conflict phù hợp
  • Tránh các sai lầm phổ biến khi resolve conflict

Phần 1: Trắc nghiệm

🧠 Quiz

Câu 1: Các conflict markers trong Git có ý nghĩa gì?

<<<<<<< HEAD
const theme = "light";
=======
const theme = "dark";
>>>>>>> feature/dark-mode
  • [ ] A) Code giữa <<<<<<<>>>>>>> sẽ bị Git xóa tự động
  • [x] B) Phần trên ======= là code từ branch hiện tại, phần dưới là từ branch đang merge vào
  • [ ] C) Phần trên ======= là code cũ, phần dưới là code mới nhất
  • [ ] D) Git đã tự chọn phần trên và bỏ phần dưới

💡 Giải thích: <<<<<<< HEAD = code từ branch hiện tại. ======= phân tách. >>>>>>> branch = code từ branch merge vào. Bạn phải quyết định giữ phần nào hoặc kết hợp cả hai.

🧠 Quiz

Câu 2: Sau khi sửa xong conflict trong file, bước tiếp theo là gì?

  • [ ] A) Chạy git merge --continue ngay lập tức
  • [ ] B) Chạy git conflict --resolve
  • [x] C) Xóa conflict markers, chạy git add <file> rồi git commit
  • [ ] D) Chạy git push để đồng bộ lên server

💡 Giải thích: Workflow: (1) Xóa markers và giữ code đúng. (2) git add <file> đánh dấu resolved. (3) git commit hoàn tất. Hủy merge: git merge --abort.

🧠 Quiz

Câu 3: Khi nào nên dùng git merge --abort?

  • [ ] A) Sau khi đã resolve tất cả conflicts thành công
  • [ ] B) Khi muốn merge mà không tạo merge commit
  • [x] C) Khi muốn hủy quá trình merge và quay về trạng thái trước khi merge
  • [ ] D) Khi muốn Git tự động chọn phiên bản của branch hiện tại

💡 Giải thích: git merge --abort hủy merge đang dở, đưa repo về trạng thái trước git merge. Hữu ích khi conflict quá phức tạp cần thảo luận với team.

Phần 2: Tìm lỗi sai

🐛 Spot-the-Bug

Tìm lỗi: Conflict resolution sai

Một developer giải quyết conflict trong config.js. File sau khi "resolve":

js
const config = {
  apiUrl: "https://api.production.com",
<<<<<<< HEAD
  timeout: 5000,
=======
  timeout: 10000,
>>>>>>> feature/new-timeout
  retries: 3,
};

Câu hỏi: Lỗi ở đâu?

Đáp án: Developer quên xóa conflict markers. File sẽ gây syntax error vì JS không hiểu <<<<<<<. Phải xóa hết markers và giữ giá trị mong muốn.

Phần 3: Bài tập — Tạo và resolve conflict

Các bước:

  1. Tạo repo mới, file greeting.txt nội dung Hello World, commit lên main
  2. Tạo branch feature/vietnamese, sửa thành Xin chào Thế giới, commit
  3. Quay về main, tạo feature/formal, sửa thành Greetings, World, commit
  4. git checkout main && git merge feature/vietnamese — fast-forward
  5. git merge feature/formalconflict xảy ra
  6. Xóa markers, kết hợp: Xin chào Thế giới — Greetings, World
  7. git add greeting.txt && git commit -m "merge: combine greetings"

WARNING

Luôn kiểm tra file sau khi resolve — conflict markers bị sót có thể gây crash trên production.