Dark mode
Bisect
Git Bisect คือเครื่องมือใน Git ที่ช่วยให้เราหา commit ที่ทำให้เกิด bug ได้อย่างรวดเร็วและแม่นยำ โดยใช้หลักการ binary search (ค้นหาตรงกลางซ้ำๆ) เหมาะมากเมื่อเราเจอบั๊กที่ไม่รู้ว่าเกิดขึ้นตั้งแต่ commit ไหน
หลักการทำงาน
- เราระบุ commit ที่ "ดี" (ไม่มีบั๊ก)
- ระบุ commit ที่ "เสีย" (มีบั๊ก)
- Git จะเช็คเอาท์ไปยัง commit ตรงกลางและถามเราว่ามัน "ดี" หรือ "เสีย"
- ทำซ้ำจนกว่าจะเจอ 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 เป็นเครื่องมือที่นักพัฒนาโปรเจกต์ใหญ่ๆ ใช้กันประจำ เพราะช่วยลดเวลาหาบั๊กจากหลายชั่วโมงเหลือไม่กี่นาที