LEVEL 3 · ระดับสูง
เครื่องมือสืบสวน
ประวัติที่ Git เก็บไว้ไม่ได้มีไว้แค่ย้อนเวลา แต่เป็นฐานข้อมูลให้สืบหา "บั๊กนี้เกิดตอนไหน ใครเขียน เพราะอะไร" บทนี้คือเครื่องมือของนักสืบ
11.1 bisect — ค้นหา commit ต้นเหตุด้วยการแบ่งครึ่ง
บั๊กโผล่มาแต่ไม่รู้ commit ไหนทำพัง และมีหลายร้อย commit ให้ไล่ git bisect ใช้หลักการค้นแบบแบ่งครึ่ง: คุณบอกจุดที่ยังดี (good) และจุดที่พังแล้ว (bad) Git จะกระโดดไปกึ่งกลางให้ทดสอบ แล้วตัดครึ่งที่ไม่เกี่ยวทิ้งทุกครั้ง — 1,000 commit หาเจอใน ~10 ครั้ง
$ git bisect start
$ git bisect bad # ตอนนี้พัง
$ git bisect good v1.0.0 # เวอร์ชันนี้เคยดี
Bisecting: 250 revisions left to test... # Git พาไปกึ่งกลาง ทดสอบแล้วบอก good/bad11.2 blame — ใครแก้บรรทัดนี้ และทำไม
git blame <file> แสดงทีละบรรทัดว่า commit ไหนแก้ครั้งล่าสุด ใครเป็นคนแก้ ชื่อฟังดูเหมือนหาคนผิด แต่จริง ๆ ใช้เพื่อ เข้าใจบริบท — เจอโค้ดแปลก ๆ blame ไปดู commit นั้นว่าแก้เพราะอะไร มักมีเหตุผลซ่อนอยู่
11.3 log ขั้นสูง — ขุดประวัติแบบเจาะจง
| คำสั่ง | หาอะไร |
|---|---|
git log -S "ฟังก์ชัน" | commit ที่เพิ่ม/ลบข้อความนี้ในโค้ด (pickaxe) — ตามรอยว่าโค้ดบรรทัดหนึ่งโผล่มาหรือหายไปเมื่อไหร่ |
git log --grep "ยอด" | commit ที่ข้อความ commit มีคำนี้ |
git log main..feature | commit ที่อยู่ใน feature แต่ยังไม่อยู่ใน main |
git log --author="Khaofang" | เฉพาะ commit ของคนนี้ |
✅ สรุปบทที่ 11 —
bisectหา commit ต้นเหตุด้วยการแบ่งครึ่ง — เร็วแบบ log₂ ·blameดูว่าใครแก้บรรทัดไหนเพื่อเข้าใจบริบท ไม่ใช่หาคนผิด ·logขั้นสูง:-Sตามรอยข้อความในโค้ด,--grepค้นข้อความ commit,A..Bดูส่วนต่างระหว่าง branch