Đâ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ơnBướ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 mainBướ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>:mainPhòng tránh: branch protection với Include administrators, không bao giờ dùng --force trên main.