Explore all courses in this category.
Explore all courses in this category.
Nguyễn Đình Cường
0 comment
09 Nov, 2026
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 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.
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 reviewMỗi tính năng làm trên một nhánh riêng, giữ nhánh chính luôn ổn định.
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.
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/loginCá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.
| Tình huống | Lệnh gợi ý |
|---|---|
| Bỏ thay đổi chưa add của một file | git restore ten-file |
| Bỏ file khỏi vùng staging | git restore --staged ten-file |
| Sửa commit gần nhất chưa push | git commit --amend |
| Hoàn tác commit đã chia sẻ | git revert ma-commit |
| Tìm lại commit tưởng đã mất | git reflog |
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 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.
.gitignore để không đưa file tạm, thư mục phụ thuộc và bí mật vào kho.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.
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.
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.
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.
Nguyễn Đình Cường
0 comment