Bisect

Git nâng cao

Amanda Crawford-Adamo

Software and Data Engineer

Git bisect là gì?

Công cụ dùng tìm kiếm nhị phân để tìm commit gây ra lỗi

Lệnh Git Bisect

git bisect

Mục đích

  1. Tìm commit lỗi nhanh
  2. Thiết yếu cho debug dữ liệu
  3. Tăng tốc tìm nguyên nhân gốc
Git nâng cao

Bisect - bắt đầu

  1. Bắt đầu phiên bisect

    git bisect start
    
  2. Đánh dấu trạng thái hiện tại là lỗi (bad)

    git bisect bad
    
  3. Đánh dấu trạng thái tốt (good) cuối cùng

    git bisect good <commit-hash>
    

Biểu đồ commit: hai commit đầu màu xanh (tốt), commit cuối màu đỏ (lỗi). Giữa chúng có ba commit màu xám (chưa rõ). Commit tốt cuối được đánh dấu bằng git bisect good và commit lỗi bằng git bisect bad.

Git nâng cao

Bisect - tìm kiếm

  1. Đánh dấu commit là lỗi (bad)

    git bisect bad
    
  2. Đánh dấu commit là tốt (good)

    git bisect good
    

Biểu đồ commit: hai commit đầu màu xanh (tốt), commit cuối màu đỏ (lỗi). Giữa chúng có ba commit màu xám (chưa rõ tốt/xấu). Git bisect dùng tìm kiếm nhị phân: bắt đầu kiểm tra commit ở giữa rồi sang trái hoặc phải.

Git nâng cao

Bisect - tìm kiếm tự động

Kiểm tra commit là tốt hay lỗi bằng cách chạy script kiểm thử tự động.

git bisect run <script_name>
  • Script phải trả về 0 nếu bài kiểm thử passed.
  • Nếu kiểm thử fail, trả về số khác 0.

Biểu đồ commit: hai commit đầu màu xanh (tốt), commit cuối màu đỏ (lỗi). Giữa chúng có ba commit màu xám (chưa rõ tốt/xấu). Git bisect dùng tìm kiếm nhị phân: bắt đầu kiểm tra commit ở giữa rồi sang trái hoặc phải.

Git nâng cao

Bisect - kết quả

Ví dụ đầu ra Git Bisect

$ git log
b1a534f is the first bad commit
commit b1a534f89l2c3d4e5f6g7h8i9j0k1l2m3n4o5p
Author: Jane Doe <[email protected]>
Date:   Thu Mar 14 14:30:00 2024 -0500

Update data transformation logic

Thoát tiến trình bisect và quay về HEAD hiện tại

git bisect reset
Git nâng cao

Khi nào dùng git bisect

Trường hợp sử dụng

  1. Tìm hồi quy trong quy trình dữ liệu
  2. Dùng test script để debug nhanh hơn

Mẹo

  • Tự động hóa kiểm thử với git bisect run <test-script>
  • Viết thông điệp commit rõ ràng để hỗ trợ quá trình
Git nâng cao

Ayo berlatih!

Git nâng cao

Preparing Video For Download...