ถ้าใครใช้ Twitica Desktop 3 (ชื่อชั่วคราว) อาจจะเห็นบั๊กในรุ่นใหม่ว่า tweet ที่มีข้อความซ้อนกันมันจะไม่ซ่อนภาพประกอบ ซึ่งปกติถ้าเลื่อนออกไปแล้วมันจะซ่อนเอง
ทีนี้พอจะแก้ผมก็ตั้งสมมุติฐานไว้ว่า commit สุดท้ายก่อนจะออก คือระบบ action มันทำพัง แต่คิดไปคิดมาแล้วก็ไม่น่าจะเกี่ยวกัน คิดไปคิดมาแล้วก็เลยอยากแนะนำให้รู้จักเครื่องมือช่วยงานอย่าง git bisect
ครับ
วิธีใช้งานมีดังนี้ครับ
เปิดใช้ bisect
ก่อนอื่นให้สั่ง git bisect start
เพื่อเริ่มกระบวนการ bisect ก่อนครับ จากนั้นเราจะต้องแนะนำให้มันรู้สถานะต่างๆ ก่อน
คำสั่งแรกคือ git bisect bad
แล้วตามด้วยเลข commit (หรือถ้าไม่ใส่จะใช้เป็น commit ปัจจุบัน) เพื่อบอกว่า commit นี้มีบั๊กอยู่
คำสั่งถัดมาคือ git bisect good v0.4.1
ด้านหลังนี้ให้ระบุเป็นเลข commit ครับ หรืออย่างผมได้ tag v0.4.1
ไว้ใน commit ของรุ่นที่แล้ว (ที่ผมมั่นใจว่ามันไม่มีบั๊ก)
พอ git มีช่วงให้ทำงานแล้วก็จะกรอกลับไปตรงกลาง (แบบ Binary search) ระหว่าง 2 commit นั้นครับ
เทส
หลังจากนั้นแล้วให้เทส commit นั้นครับ จะเป็น unit testing ก็ได้ หรือผมไม่มี unit test ก็ compile-run ดูเลยก็ได้ว่ายังบั๊กอยู่ไหม เสร็จแล้วก็รายงานผลด้วยคำสั่งเดิมครับ git bisect good
หรือ git bisect bad
ทำซ้ำจนกระทั่ง bisect เสร็จ
เมื่อล้อมเข้ามาถึงขั้นสุดท้ายแล้ว bisect ก็จะแสดงผล commit ที่ทำให้เกิดบั๊กขึ้นมาครับ จะเปิด diff ดูก็ได้ครับ
(ในภาพนี้ใช้คำสั่ง git show
ตามด้วยเลข commit)
ดู diff แป๊บเดียวเห็นเลยว่าผมแอบเพิ่ม shouldComponentUpdate
ไป (แถม commit message ก็ไม่ได้บอกด้วยนะ) แล้วมันทำให้ tweet ที่ซ้อนอยู่ไม่อัพเดต
แก้บั๊ก
เมื่อเจอแล้วอย่าลืม git bisect reset
เพื่อออกจาก bisect ก่อนนะครับ ไม่อย่างนั้นเราจะทำงานใน commit ที่บั๊กอยู่ ก่อนจะ reset จะสั่ง git bisect log
เพื่อเก็บ log ไว้ดูเล่นก็ได้ครับ
สรุปแล้วคำสั่ง git bisect
จะช่วยย้อน commit ให้เรา โดยกระโดดเป็นช่วงๆ เพื่อให้สามารถหาต้นตอของบั๊กได้อย่างสะดวกครับ ในเคสของผมนี่ถ้าไปนั่งไล่โค้ดคงจะอีกนานกว่าจะเจอสาเหตุ