- vừa được xem lúc

Khi Git "phản kháng": Xử lý các File chưa hợp nhất như một chuyên gia

0 0 1

Người đăng: Vinh Phạm

Theo Viblo Asia

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

image.png

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.

Bình luận

Bài viết tương tự

- vừa được xem lúc

Đặt tên commit message sao cho "tình nghĩa anh em chắc chắn bền lâu"????

. Lời mở đầu. .

1 2 1.1k

- vừa được xem lúc

Tập hợp những câu lệnh GIT hữu dụng

Dưới đây là một vài ví dụ về các câu lệnh Git mà tôi thường dùng. git config --global user.name "John Doe". git config --global user.

0 0 76

- vừa được xem lúc

Cấu hình CI/CD với Github (phần 2): Trigger một work flow

Events trigger. Bạn có thể cấu hình cho workflows chạy khi có một sự kiện nào đó xảy ra trên GitHub, theo một lịch có sẵn hoặc cũng có thể là một sự kiện nào đó xảy ra ngoài GitHub.

0 0 93

- vừa được xem lúc

Cấu hình CI/CD với Github (phần 1): Một ít lý thuyết

CI/CD là gì. Về mặt khái niệm là vậy nhưng về mặt triển khai thì CI/CD là quá trình tự động thực hiện các quá trình build, test, release, deploy khi có các trigger như commit/merge code lên một branch định sẵn hoặc có thể là tự động chạy theo một lịch cố định.

0 0 135

- vừa được xem lúc

Giới thiệu về Git LFS

. Git LFS là gì . Git LFS làm điều này bằng cách thay thế các tệp lớn trong repo của bạn bằng một con trỏ nhỏ.

0 0 44

- vừa được xem lúc

Git workflow được Google và Facebook sử dụng có gì hay ho

Với developer thì Git hẳn là công cụ rất quen thuộc và không thể thiếu rồi. Thế nhưng có mấy ai thực sự hiểu được Git.

0 0 97