Giao diện
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
<<<<<<<và>>>>>>>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 --continuengay lập tức - [ ] B) Chạy
git conflict --resolve - [x] C) Xóa conflict markers, chạy
git add <file>rồigit 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 commithoà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 --aborthủy merge đang dở, đưa repo về trạng thái trướcgit 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:
- Tạo repo mới, file
greeting.txtnội dungHello World, commit lênmain - Tạo branch
feature/vietnamese, sửa thànhXin chào Thế giới, commit - Quay về
main, tạofeature/formal, sửa thànhGreetings, World, commit git checkout main && git merge feature/vietnamese— fast-forwardgit merge feature/formal— conflict xảy ra- Xóa markers, kết hợp:
Xin chào Thế giới — Greetings, World 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.