メインコンテンツへスキップ
記事一覧へ戻る

Git Bisect หา Commit ที่ทำให้ระบบพัง

bisect ใช้การค้นหาแบบแบ่งครึ่งระหว่าง commit ที่ดีและ commit ที่มีปัญหา อธิบายหลักการใช้งาน กรณีที่เหมาะ และข้อควรระวังจากเอกสารทางการ

Git Bisect หา Commit ที่ทำให้ระบบพัง

bisect ใช้การค้นหาแบบแบ่งครึ่งระหว่าง commit ที่ดีและ commit ที่มีปัญหา เหมาะกับ regression ที่มีจุดเริ่มไม่ชัดหลังมี commit จำนวนมาก บทความนี้สรุปแนวคิดจากเอกสารทางการของ Git และจุดที่ควรตรวจเมื่อนำไปใช้จริง

ภาพรวม

Git บันทึกประวัติเป็น commit และแยกงานด้วย reference เช่น branch คำสั่งต่าง ๆ อาจเปลี่ยนไฟล์ทำงาน index หรือประวัติ จึงควรตรวจผลก่อนใช้กับงานร่วมกัน

หัวข้อนี้ตอบโจทย์เฉพาะเรื่อง: bisect ใช้การค้นหาแบบแบ่งครึ่งระหว่าง commit ที่ดีและ commit ที่มีปัญหา จึงควรเริ่มจากปัญหาที่ต้องแก้และผลลัพธ์ที่คาดหวัง ไม่ใช่เพียงเปิดฟีเจอร์เพราะมีอยู่ในเครื่องมือ

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

Git checkout commit กลางทางให้ทดสอบแล้วตัดช่วงที่ไม่เกี่ยวออกตามผล good หรือ bad

ให้ตรวจทั้งสถานะที่เครื่องมือรายงานและผลลัพธ์ปลายทางที่ผู้ใช้หรือระบบอื่นได้รับ หากสองส่วนไม่ตรงกัน ควรกลับไปตรวจค่าตั้งต้นและขอบเขตที่ฟีเจอร์นี้รับผิดชอบก่อนเปลี่ยนค่าเพิ่มเติม

เหมาะกับงานแบบไหน

เหมาะกับ regression ที่มีจุดเริ่มไม่ชัดหลังมี commit จำนวนมาก

ก่อนทดลอง ให้ระบุสิ่งที่จะใช้วัดผล เช่น เวลาตอบสนอง ความพร้อมใช้งาน ความถูกต้องของข้อมูล หรือภาระการดูแล แล้วเทียบกับสภาพเดิม วิธีนี้ช่วยให้รู้ว่าฟีเจอร์แก้ปัญหาจริงหรือย้ายภาระไปอีกจุดหนึ่ง

ขั้นตอนนำไปใช้

  1. สร้าง branch หรือ worktree ทดสอบและบันทึก commit hash
  2. ดู git status และ git log ก่อนและหลังใช้คำสั่ง
  3. ตรวจ diff และรันทดสอบที่เกี่ยวข้องก่อนส่งงาน

เริ่มจากขอบเขตเล็กและเก็บผลทดสอบไว้กับการเปลี่ยนแปลง หากจะใช้ใน production ให้กำหนดผู้ติดตามผลและเงื่อนไขที่จะหยุดการขยายการใช้งาน

ข้อควรระวัง

ผลทดสอบต้องทำซ้ำได้ และควรระวัง commit เก่าที่ build ไม่ผ่านด้วยเหตุอื่น

แปลงข้อควรระวังนี้เป็นรายการตรวจในการทบทวนงาน เพราะปัญหาจากค่าตั้งต้นอาจไม่แสดงทันทีในสภาพแวดล้อมทดสอบ

สรุป

bisect ใช้การค้นหาแบบแบ่งครึ่งระหว่าง commit ที่ดีและ commit ที่มีปัญหา เหมาะกับ regression ที่มีจุดเริ่มไม่ชัดหลังมี commit จำนวนมาก ก่อนนำไปใช้กับงานหลัก ควรตรวจผลตามขั้นตอนข้างต้นและทบทวนข้อจำกัดของระบบที่มีอยู่

อ่านเพิ่มเติม: เอกสารทางการของ Git