Skip to content

Bisect

Git Bisect คือเครื่องมือใน Git ที่ช่วยให้เราหา commit ที่ทำให้เกิด bug ได้อย่างรวดเร็วและแม่นยำ โดยใช้หลักการ binary search (ค้นหาตรงกลางซ้ำๆ) เหมาะมากเมื่อเราเจอบั๊กที่ไม่รู้ว่าเกิดขึ้นตั้งแต่ commit ไหน

หลักการทำงาน

  1. เราระบุ commit ที่ "ดี" (ไม่มีบั๊ก)
  2. ระบุ commit ที่ "เสีย" (มีบั๊ก)
  3. Git จะเช็คเอาท์ไปยัง commit ตรงกลางและถามเราว่ามัน "ดี" หรือ "เสีย"
  4. ทำซ้ำจนกว่าจะเจอ commit ต้นตอ

ตัวอย่างการใช้งาน

สมมุติว่า bug เกิดขึ้นใน commit ปัจจุบัน แต่เมื่อ 10 commit ก่อนหน้านี้ยังไม่มีปัญหา

bash
git bisect start
git bisect bad                # commit ปัจจุบัน (มีบั๊ก)
git bisect good HEAD~10       # commit ที่มั่นใจว่าไม่มีบั๊ก

Git จะเช็คเอาท์ไปยัง commit ตรงกลาง ให้เราทดสอบ ถ้าพบว่ายังมีบั๊กให้สั่ง

bash
git bisect bad

แต่ถ้าไม่มีบั๊กให้สั่ง

bash
git bisect good

Git จะวนแบบนี้จนเจอ commit ที่ทำให้เกิดบั๊ก

จบการค้นหา

เมื่อเจอ commit ต้นตอแล้ว ให้กลับไปที่ branch เดิมด้วย

bash
git bisect reset

ข้อดี

  • ประหยัดเวลา ไม่ต้องไล่เช็คทีละ commit
  • ใช้ได้กับ repo ขนาดใหญ่

ตัวอย่างสถานการณ์จริง

"สมมุติฟีเจอร์ที่เคยทำงานปกติ กลับพังหลัง merge PR ใหม่ แต่ไม่แน่ใจว่าเกิดจาก commit ไหน ใช้ git bisect จะช่วย pinpoint ได้ทันที"


Bisect เป็นเครื่องมือที่นักพัฒนาโปรเจกต์ใหญ่ๆ ใช้กันประจำ เพราะช่วยลดเวลาหาบั๊กจากหลายชั่วโมงเหลือไม่กี่นาที