Skip to content
Tayakorn
Git Handbook

Git Handbook

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/bad

11.2 blame — ใครแก้บรรทัดนี้ และทำไม

git blame <file> แสดงทีละบรรทัดว่า commit ไหนแก้ครั้งล่าสุด ใครเป็นคนแก้ ชื่อฟังดูเหมือนหาคนผิด แต่จริง ๆ ใช้เพื่อ เข้าใจบริบท — เจอโค้ดแปลก ๆ blame ไปดู commit นั้นว่าแก้เพราะอะไร มักมีเหตุผลซ่อนอยู่

11.3 log ขั้นสูง — ขุดประวัติแบบเจาะจง

คำสั่งหาอะไร
git log -S "ฟังก์ชัน"commit ที่เพิ่ม/ลบข้อความนี้ในโค้ด (pickaxe) — ตามรอยว่าโค้ดบรรทัดหนึ่งโผล่มาหรือหายไปเมื่อไหร่
git log --grep "ยอด"commit ที่ข้อความ commit มีคำนี้
git log main..featurecommit ที่อยู่ใน feature แต่ยังไม่อยู่ใน main
git log --author="Khaofang"เฉพาะ commit ของคนนี้

สรุปบทที่ 11bisect หา commit ต้นเหตุด้วยการแบ่งครึ่ง — เร็วแบบ log₂ · blame ดูว่าใครแก้บรรทัดไหนเพื่อเข้าใจบริบท ไม่ใช่หาคนผิด · log ขั้นสูง: -S ตามรอยข้อความในโค้ด, --grep ค้นข้อความ commit, A..B ดูส่วนต่างระหว่าง branch

Read the full book