Trong quy trình làm việc chuyên nghiệp với Git, không có gì gây gián đoạn hơn thông báo sau:
error: Pulling is not possible because you have unmerged files.
hint: Fix them up in the work tree, and then use 'git add/rm <file>'
hint: as appropriate to mark resolution and make a commit.
fatal: Exiting because of an unresolved conflict.
Đây không chỉ là một lỗi. Git đang nói với bạn: "Chúng ta còn việc dang dở cần giải quyết." Trong bài viết này, chúng ta sẽ cùng tìm hiểu cách xử lý các file chưa hợp nhất như một kỹ sư dày dạn kinh nghiệm — thông qua các tình huống thực tế, chiến lược nâng cao và thói quen làm việc chuyên nghiệp.
Nguyên nhân gây ra File chưa hợp nhất (Unmerged Files)?
File chưa hợp nhất xảy ra khi bạn:
- Chạy
git pull
nhưng Git không thể tự động hợp nhất thay đổi giữa local và remote. - Vẫn còn xung đột merge từ một thao tác trước chưa được giải quyết.
Điều này khiến Git rơi vào trạng thái đang hợp nhất dở, và tạm dừng mọi thao tác cho đến khi bạn giải quyết hoặc hủy bỏ quá trình đó.
Tình huống ví dụ: Refactor Module báo cáo trong dự án Spark
Giả sử bạn đang làm việc nhóm để refactor module báo cáo trên một nhánh tính năng:
git pull origin users/ismaelg/spark-clean-architecture/reports-refactoring
Kết quả:
fatal: Exiting because of an unresolved conflict.
Bạn kiểm tra trạng thái với git status
và thấy một số file có trạng thái “both modified” – nghĩa là có xung đột.
Giải quyết xung đột như một Pro
Bước 1: Xem xung đột
git status
Tìm các mục như:
both modified: reports/reportService.ts
Mở file và tìm các đánh dấu xung đột:
<<<<<<< HEAD
const reportLimit = 100;
=======
const reportLimit = 50;
>>>>>>> origin/users/ismaelg/spark-clean-architecture/reports-refactoring
Bước 2: Giải quyết một cách thông minh
Chọn nội dung đúng hoặc kết hợp cả hai. Ví dụ:
const reportLimit = 75; // compromise for scalability vs latency
Sau đó xóa các marker <<<<<<<
, =======
, >>>>>>>
Bước 3: Đánh dấu là đã giải quyết
git add reports/reportService.ts
Bước 4: Commit Merge
git commit -m "Resolve merge conflicts in reportService.ts"
Bước 5: Tiếp tục quy trình làm việc
Lúc này git pull
đã hoàn tất thành công. Dự án của bạn trở về trạng thái sạch (clean state).
Kỹ thuật nâng cao
1. Dùng công cụ hợp nhất trực quan (Visual Merge Tool)
Các công cụ hỗ trợ:
- VSCode:
code --wait .
git mergetool
- Meld, Beyond Compare, hoặc KDiff3
2. Hủy Merge nếu có vấn đề
Nếu bạn nhận ra mọi thứ đang đi sai hướng:
git merge --abort
Hoặc nếu đang trong quá trình rebase:
git rebase --abort
3. Dùng Stash trước khi Pull
git stash
# then pull
# resolve
# finally apply back
git stash pop
Thói quen phòng ngừa xung đột
Tóm lược
- Git sẽ không cho phép bạn tiếp tục nếu còn file chưa hợp nhất.
- Xung đột là điều tự nhiên trong môi trường làm việc nhóm — giải quyết nó là trách nhiệm của bạn.
- Học cách dùng công cụ hoặc giải quyết thủ công.
- Thành thạo các lệnh:
git status
,git mergetool
,git add
,git commit
. - Đừng hoảng loạn — chỉ cần lần theo hướng dẫn.
Kết luận
Git không chỉ là công cụ, mà là đồng đội của bạn trong hợp tác lập trình. Các file chưa hợp nhất không phải là sai lầm — chúng là điểm kiểm tra. Việc học cách xử lý chúng một cách tự tin sẽ giúp bạn từ một lập trình viên thông thường trở thành cao thủ Git thực thụ.
Lần tới khi Git "đẩy ngược lại", bạn sẽ sẵn sàng đối mặt.