Bisect

Git ขั้นสูง

Amanda Crawford-Adamo

Software and Data Engineer

git bisect คืออะไร?

เครื่องมือที่ใช้ binary search เพื่อค้นหา commit ที่ทำให้เกิดบัก

คำสั่ง Git Bisect

git bisect

จุดประสงค์

  1. ค้นหา bad commit ได้รวดเร็ว
  2. จำเป็นสำหรับการดีบักข้อมูล
  3. ช่วยให้วิเคราะห์ต้นเหตุได้เร็วขึ้น
Git ขั้นสูง

Bisect - เริ่มต้น

  1. เริ่ม session ของ git bisect

    git bisect start
    
  2. กำหนดสถานะปัจจุบันเป็น bad state

    git bisect bad
    
  3. ระบุ good state ล่าสุดที่รู้จัก

    git bisect good <commit-hash>
    

กราฟแสดง commit โดย 2 commit แรกเป็น good commit แสดงด้วยสีเขียว commit สุดท้ายเป็นสีแดงแสดงว่าเป็น bad commit ที่รู้จัก commit ที่อยู่ระหว่างกลางอีก 3 commit ยังไม่ทราบสถานะแสดงด้วยสีเทา โดย git bisect good ระบุ commit ที่ดีล่าสุด และ git bisect bad ระบุ bad commit

Git ขั้นสูง

Bisect - ค้นหา

  1. ทำเครื่องหมาย commit ว่าเป็น bad commit

    git bisect bad
    
  2. ทำเครื่องหมาย commit ว่าเป็น good commit

    git bisect good
    

กราฟแสดง commit โดย 2 commit แรกเป็น good commit แสดงด้วยสีเขียว commit สุดท้ายเป็นสีแดงแสดงว่าเป็น bad commit ที่รู้จัก commit ที่อยู่ระหว่างกลางอีก 3 commit ยังไม่ทราบสถานะแสดงด้วยสีเทา git bisect ใช้ binary search โดยเริ่มตรวจสอบจาก commit ตรงกลาง แล้วจึงตรวจ commit ทางซ้ายหรือขวาถัดไป

Git ขั้นสูง

Bisect - ค้นหาอัตโนมัติ

ตรวจสอบว่า commit นั้น good หรือ bad โดยรันสคริปต์ทดสอบอัตโนมัติ

git bisect run <script_name>
  • สคริปต์ต้องคืนค่า 0 หากทดสอบผ่าน
  • หากทดสอบไม่ผ่าน ให้คืนค่าเป็นจำนวนที่ไม่ใช่ศูนย์

กราฟแสดง commit โดย 2 commit แรกเป็น good commit แสดงด้วยสีเขียว commit สุดท้ายเป็นสีแดงแสดงว่าเป็น bad commit ที่รู้จัก commit ที่อยู่ระหว่างกลางอีก 3 commit ยังไม่ทราบสถานะแสดงด้วยสีเทา git bisect ใช้ binary search โดยเริ่มตรวจสอบจาก commit ตรงกลาง แล้วจึงตรวจ commit ทางซ้ายหรือขวาถัดไป

Git ขั้นสูง

Bisect - ผลลัพธ์

ตัวอย่างผลลัพธ์ของ 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

สิ้นสุดกระบวนการ bisect และกลับสู่ HEAD ปัจจุบัน

git bisect reset
Git ขั้นสูง

ควรใช้ git bisect เมื่อไหร่?

กรณีใช้งาน

  1. ค้นหา regression ใน data workflow
  2. ใช้สคริปต์ทดสอบเพื่อดีบักได้เร็วขึ้น

เคล็ดลับ

  • ทดสอบอัตโนมัติด้วย git bisect run <test-script>
  • ใช้ commit message ที่สื่อความหมายเพื่อช่วยในกระบวนการ
Git ขั้นสูง

มาฝึกกันเถอะ!

Git ขั้นสูง

Preparing Video For Download...