#1. Bài toán
Code hôm nay lỗi, nhưng lỗi này đã xuất hiện từ 2 tuần trước. Bạn không biết chính xác commit nào gây ra lỗi.
#2. Giải pháp: git bisect
Git Bisect sử dụng thuật toán Binary Search trên lịch sử commit.
git bisect startgit bisect bad(commit hiện tại lỗi)git bisect good <commit_id>(commit cách đây 2 tuần ổn)- Git sẽ tự động “checkout” một commit ở giữa. Bạn test, nếu lỗi thì
git bisect bad, nếu ổn thìgit bisect good. - Sau vài bước, Git chỉ đích danh commit gây lỗi.
#3. Kinh nghiệm
- Automated Bisect: Bạn có thể truyền một script test vào:
git bisect run php artisan test. Git sẽ tự động chạy script này cho mỗi bước kiểm tra. Cực mạnh cho CI/CD.
#4. Phỏng vấn
Q: Độ phức tạp của Git Bisect? A: O(log N) với N là số lượng commit. Rất nhanh so với việc đi check từng commit một (O(N)).