Nâng CaoGit iconGit

Vừa force push nhầm lên main, history bị overwrite. Quy trình khôi phục khẩn cấp?

Đây là tình huống nghiêm trọng. Hành động ngay:

Bước 1: Không làm gì thêm trên main, thông báo team stop pulling.

Bước 2: Tìm commit cuối cùng đúng trên GitHub:
- Vào GitHub → repo → Commits history → tìm commit trước force push
- Hoặc: GitHub lưu reflog nội bộ, Contact GitHub Support nếu critical

Bước 3: Tìm trên local của bất kỳ teammate nào chưa pull:

bash
# Trên máy teammate chưa pull (họ vẫn có local history cũ):
git log --oneline  # KHÔNG có origin/ — local log thấy history cũ
# git log --oneline origin/main sẽ thấy history MỚI (đã bị overwrite)
# Nhờ teammate dùng local commit hash của họ để restore:
git push --force-with-lease origin <good-hash>:main  # dùng force-with-lease an toàn hơn

Bước 4: Nếu có backup tag:

bash
git checkout v2.3.0  # tag trước force push
git checkout -b main-recovery
git push --force origin main-recovery
# Tạo PR vào main

Bước 5: Nếu không ai có — reflog local:

bash
git reflog  # trên máy bạn
# Tìm hash trước khi force push
git push --force origin <old-hash>:main

Phòng tránh: branch protection với Include administrators, không bao giờ dùng --force trên main.

Xem toàn bộ Git cùng filter theo level & chủ đề con.

Mở danh sách Git