Đâ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:
# Trên máy teammate chưa pull (local branch của họ vẫn giữ history tốt):
git log --oneline main # xác định <good-hash> — commit cuối trước force push
git fetch origin # bắt buộc: cập nhật origin/main để lease so đúng remote hiện tại
git push --force-with-lease origin <good-hash>:mainNếu bỏ qua git fetch, lease sẽ so với tracking ref cũ (vẫn là hash tốt) → lệnh bị reject dù bạn đang đẩy đúng history.
Bước 4: Nếu có backup tag: checkout tag trước force push (git checkout v2.3.0), tạo branch main-recovery, push (branch mới — không cần force) rồi mở PR vào main.
Bước 5: Nếu không ai có — reflog trên chính máy đã force push: git reflog tìm hash trước force push → git push --force-with-lease origin <old-hash>:main.
Phòng tránh: branch protection với Include administrators, không bao giờ dùng --force trên main.