Handle GIT
Trong quá trình sử dụng Git trong dự án thực tế, bạn sẽ gặp một số trường hợp đặc biệt hoặc lỗi phổ biến. Dưới đây là cách xử lý một số tình huống thường gặp, kèm theo hướng dẫn chi tiết và ngắn gọn:
1. Xung đột khi merge (Merge Conflict)
Tình huống: Khi merge branch (hoặc pull từ remote), Git báo xung đột vì cùng một đoạn mã bị sửa đổi ở cả hai branch.
Cách xử lý:
Bước 1: Git sẽ tạm dừng merge và đánh dấu các file có xung đột:
Bước 2: Mở file xung đột, tìm các đoạn được đánh dấu:
Chỉnh sửa thủ công để giữ lại nội dung mong muốn, xóa các ký hiệu
<<<<<<<
,=======
,>>>>>>>
.
Bước 3: Đánh dấu file đã giải quyết:
Bước 4: Hoàn tất merge:
Mẹo:
Sử dụng công cụ merge như VS Code, IntelliJ, hoặc
git mergetool
để hỗ trợ.Pull thường xuyên từ
develop
để giảm xung đột.
2. Commit nhầm file hoặc thông điệp commit sai
Tình huống: Bạn commit nhưng thêm nhầm file hoặc viết sai thông điệp.
Cách xử lý:
Sửa thông điệp commit gần nhất:
Thêm file bị thiếu hoặc xóa file nhầm trong commit gần nhất:
Lưu ý: Nếu đã push lên remote, cần force push (cẩn thận):
3. Push lên remote nhưng bị từ chối (non-fast-forward)
Tình huống: Khi push, Git báo lỗi vì remote có thay đổi mà local chưa cập nhật:
Cách xử lý:
Bước 1: Pull thay đổi từ remote:
Bước 2: Giải quyết xung đột (nếu có) như mục 1.
Bước 3: Push lại:
Mẹo: Luôn pull trước khi push để tránh lỗi này.
4. Xóa nhầm branch hoặc commit
Tình huống: Bạn vô tình xóa branch hoặc commit cần thiết.
Cách xử lý:
Khôi phục branch đã xóa:
Tìm commit hash của branch bị xóa:
Kết quả sẽ hiển thị lịch sử thao tác, ví dụ:
Tạo lại branch:
Khôi phục commit bị xóa:
Nếu commit bị xóa do
reset
:Tìm hash của commit bị xóa, sau đó:
Hoặc khôi phục toàn bộ:
5. Quên merge develop trước khi tạo PR
Tình huống: Bạn đã push branch lên remote để tạo PR, nhưng quên merge mã mới nhất từ develop
, dẫn đến PR lạc hậu.
Cách xử lý:
Bước 1: Cập nhật
develop
và merge vào branch:Bước 2: Giải quyết xung đột nếu có (xem mục 1).
Bước 3: Push lại branch:
Mẹo: Nếu đã tạo PR, PR sẽ tự động cập nhật sau khi push.
6. Commit chứa thông tin nhạy cảm (API key, mật khẩu)
Tình huống: Bạn vô tình commit file chứa thông tin nhạy cảm và đã push lên remote.
Cách xử lý:
Bước 1: Xóa thông tin nhạy cảm khỏi mã:
Sửa file, xóa thông tin nhạy cảm.
Thêm file vào
.gitignore
để tránh tái phạm.
Bước 2: Viết lại lịch sử commit:
Sử dụng
git filter-branch
hoặc công cụ nhưbfg
:Hoặc dùng BFG Repo-Cleaner (dễ hơn):
Bước 3: Force push để cập nhật remote:
Bước 4: Thông báo team để pull lại mã mới và thay đổi thông tin nhạy cảm (như API key).
7. Branch local lạc hậu so với remote
Tình huống: Branch local của bạn không đồng bộ với remote sau khi đồng nghiệp merge PR.
Cách xử lý:
Cập nhật branch local:
Tiếp tục làm việc hoặc tạo branch mới từ
develop
.
8. PR quá lớn, khó review
Tình huống: Bạn tạo PR với quá nhiều thay đổi, khiến đồng nghiệp khó kiểm tra.
Cách xử lý:
Chia nhỏ commit:
Sử dụng
git rebase -i
để chỉnh sửa lịch sử commit:Chia commit lớn thành các commit nhỏ hơn với
edit
.
Hoặc tạo branch mới cho từng phần nhỏ:
Tạo nhiều PR cho từng tính năng nhỏ.
Mẹo: Thảo luận với team trước khi làm tính năng lớn để chia task hợp lý.
9. Lỡ force push gây mất mã của team
Tình huống: Bạn force push nhầm lên branch chung (develop
, main
), làm mất commit của đồng nghiệp.
Cách xử lý:
Bước 1: Tìm lịch sử commit bị mất:
Xác định hash của commit trước khi force push.
Bước 2: Khôi phục commit:
Bước 3: Thông báo team ngay lập tức và xin lỗi, đảm bảo mọi người pull lại mã.
Mẹo: Tránh force push trên branch chung, hoặc bật bảo vệ branch trên GitHub/GitLab.
10. Không thể push vì dung lượng file lớn
Tình huống: Bạn commit file lớn (như dataset, video), Git từ chối push.
Cách xử lý:
Bước 1: Xóa file lớn khỏi commit:
Bước 2: Sử dụng Git LFS (Large File Storage) nếu cần:
Bước 3: Push lại:
Mẹo: Thêm file lớn vào
.gitignore
và lưu trữ trên cloud (Google Drive, S3).
Lời khuyên chung
Backup thường xuyên: Tạo branch dự phòng trước khi thực hiện thao tác nguy hiểm (rebase, force push).
Giao tiếp với team: Thông báo khi làm thay đổi lớn hoặc gặp lỗi nghiêm trọng.
Học từ lỗi: Ghi chú các tình huống đã gặp để xử lý nhanh hơn lần sau.
Sử dụng công cụ: VS Code, SourceTree, hoặc GitKraken giúp trực quan hóa Git.
Last updated