Phỏng vấn Git: merge, rebase, xử lý xung đột và quy trình làm việc nhóm

  • author-image

    Nguyễn Đình Cường

  • blog-tag
  • blog-comment 0 comment
  • created-date 09 Nov, 2026
blog-thumbnail

Git là công cụ mà mọi lập trình viên dùng hằng ngày, nên người phỏng vấn thường kiểm tra xem bạn có thật sự quen với nó hay không. Họ ít khi hỏi lệnh hiếm, mà tập trung vào tình huống thường gặp: làm việc nhóm, sửa nhầm lỗi và giữ lịch sử gọn gàng.

Git và GitHub khác nhau thế nào?

Git là hệ thống quản lý phiên bản phân tán chạy trên máy bạn. GitHub (hoặc GitLab, Bitbucket) là dịch vụ lưu trữ kho Git trên mạng, bổ sung các tính năng cộng tác như pull request, issue và CI.

Quy trình làm việc cơ bản

git switch -c feature/login# sửa codegit add .git commit -m "Thêm màn hình đăng nhập"git push -u origin feature/login# tạo pull request để được review

Mỗi tính năng làm trên một nhánh riêng, giữ nhánh chính luôn ổn định.

Merge và rebase

  • Merge: hợp nhất hai nhánh bằng một merge commit mới, giữ nguyên lịch sử thật.
  • Rebase: viết lại các commit của nhánh bạn lên đầu nhánh đích, tạo lịch sử tuyến tính gọn gàng.

Quy tắc vàng: không rebase nhánh đã được người khác dùng chung vì nó viết lại lịch sử và có thể gây rắc rối cho đồng đội. Rebase thích hợp để cập nhật nhánh cá nhân với nhánh chính trước khi tạo pull request.

Xử lý xung đột (conflict)

Xung đột xảy ra khi hai nhánh sửa cùng một vùng code theo cách khác nhau. Git đánh dấu trong file như sau:

<<<<<<< HEADconst limit = 10;=======const limit = 20;>>>>>>> feature/login

Cách xử lý: mở file, hiểu ý định hai bên, giữ lại phiên bản đúng hoặc kết hợp, xóa các dấu đánh dấu, chạy thử, rồi git add và hoàn tất bằng git commit (hoặc git rebase --continue). Nếu cần thì hỏi đồng nghiệp là người viết đoạn code kia.

Hoàn tác khi lỡ sai

Tình huốngLệnh gợi ý
Bỏ thay đổi chưa add của một filegit restore ten-file
Bỏ file khỏi vùng staginggit restore --staged ten-file
Sửa commit gần nhất chưa pushgit commit --amend
Hoàn tác commit đã chia sẻgit revert ma-commit
Tìm lại commit tưởng đã mấtgit reflog

reset và revert khác nhau ra sao?

git reset di chuyển con trỏ nhánh và có thể xóa commit khỏi lịch sử, chỉ nên dùng cho commit chưa chia sẻ. git revert tạo một commit mới đảo ngược thay đổi, an toàn cho nhánh dùng chung.

git stash và cherry-pick

git stash cất tạm thay đổi chưa commit để bạn chuyển nhánh làm việc khác, sau đó lấy lại bằng git stash pop. git cherry-pick áp dụng một commit cụ thể từ nhánh khác vào nhánh hiện tại, hữu ích khi cần đưa bản sửa lỗi sang nhánh phát hành.

Những thói quen tốt nên kể

  • Commit nhỏ, mỗi commit một mục đích, thông điệp rõ ràng.
  • Kéo cập nhật thường xuyên để xung đột nhỏ và dễ xử lý.
  • Dùng .gitignore để không đưa file tạm, thư mục phụ thuộc và bí mật vào kho.
  • Không bao giờ commit mật khẩu, khóa API; nếu lỡ, phải đổi khóa ngay.

Câu hỏi về quy trình nhóm

Bạn quen với mô hình nhánh nào?

Có hai mô hình thường được nhắc. Git Flow dùng nhiều nhánh dài hạn như main, develop, release, hotfix, phù hợp với sản phẩm có chu kỳ phát hành rõ ràng. Trunk-based development dùng một nhánh chính và các nhánh tính năng sống rất ngắn, kết hợp kiểm thử tự động và cờ tính năng, phù hợp với đội triển khai liên tục. Bạn không cần chọn một cái là tốt hơn, mà hãy nói được vì sao quy trình đó hợp với nhóm.

Một pull request tốt trông thế nào?

Nhỏ và tập trung vào một việc, có mô tả nêu bối cảnh và cách kiểm tra, có ảnh chụp màn hình nếu thay đổi giao diện, kiểm thử đã chạy xanh. PR nhỏ dễ review hơn và ít rủi ro hơn nhiều so với PR hàng nghìn dòng.

Làm sao tìm ra commit gây lỗi?

Dùng git bisect: bạn đánh dấu một commit tốt và một commit xấu, Git sẽ chia đôi lịch sử để bạn kiểm tra từng bước cho đến khi tìm ra commit đầu tiên gây lỗi. Ngoài ra git blame cho biết ai sửa dòng nào lần cuối, nhưng mục đích là hiểu bối cảnh chứ không phải đổ lỗi.

Kết luận

Hãy luyện trên một kho thử nghiệm: tạo hai nhánh, cố tình gây xung đột, giải quyết bằng cả merge lẫn rebase, rồi dùng reflog để cứu một commit. Sau một buổi thực hành, bạn sẽ trả lời các câu Git một cách tự tin.

Để học Git trong quy trình làm dự án thực tế, hãy tham khảo thêm các khóa tại codebem.com.

author_photo
Nguyễn Đình Cường

0 comment