0Pricing
Git & GitHub Professional Workflow · บทเรียน

Git Bisect สำหรับการแก้ไขข้อบกพร่อง

ใช้ `git bisect` เพื่อค้นหาคอมมิตเฉพาะที่ทำให้เกิดข้อบกพร่องได้อย่างมีประสิทธิภาพ ช่วยประหยัดเวลาในการแก้ไขข้อบกพร่อง

Git Bisect สำหรับการแก้ไขข้อบกพร่อง เป็นบทเรียน Git & GitHub Professional Workflow ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Git & GitHub Professional Workflow และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Git & GitHub Professional Workflow มีบทเรียนทั้งหมด 4 บทเรียน

ค้นหาข้อผิดพลาดได้เร็วขึ้นด้วย Git

การแก้ไขข้อบกพร่องอาจเป็นเรื่องยาก บางครั้งข้อผิดพลาดปรากฏขึ้น แต่คุณไม่รู้ว่าการเปลี่ยนแปลงใดเป็นสาเหตุ

git bisect เป็นคำสั่ง Git อันทรงพลังที่ช่วยระบุคอมมิตที่แน่นอนซึ่งทำให้เกิดข้อผิดพลาด โดยใช้อัลกอริทึมการค้นหาแบบทวิภาคเพื่อจำกัดคอมมิตหลายพันรายการให้แคบลงอย่างรวดเร็ว

พลังของการค้นหาแบบทวิภาค

ลองนึกภาพว่าโครงการของคุณมีคอมมิต 100 รายการ และข้อผิดพลาดเกิดขึ้นที่ใดที่หนึ่งระหว่างรายการแรกกับรายการสุดท้าย การตรวจสอบทีละรายการด้วยตนเองช่างช้าเหลือเกิน!

git bisect ทำงานคล้ายเกม "ทายตัวเลข":

  • คุณบอก Git ว่าคอมมิตใด "ดี" (จุดที่ยังไม่มีข้อผิดพลาด)
  • คุณบอก Git ว่าคอมมิตใด "เสีย" (จุดที่มีข้อผิดพลาด)
  • Git เลือกคอมมิตที่อยู่ประมาณกึ่งกลางและขอให้คุณทดสอบ
  • คุณระบุว่าเป็น "ดี" หรือ "เสีย" แล้ว Git จะลดขอบเขตการค้นหาลงครึ่งหนึ่ง

เริ่มค้นหากันเลย!

เริ่มต้นด้วยการบอก Git ว่าคุณกำลังเริ่มเซสชันการค้นหาแบบทวิภาค คำสั่งนี้จะเริ่มกระบวนการ:

git bisect start

หลังจากเริ่มต้นแล้ว คุณจะระบุคอมมิต "เสีย" ที่ทราบแน่ชัด (จุดที่มีข้อผิดพลาด) และคอมมิต "ดี" ที่ทราบแน่ชัด (จุดที่ไม่มีข้อผิดพลาดอย่างแน่นอน)

โดยทั่วไป คอมมิต "เสีย" คือ HEAD ปัจจุบันของคุณ ส่วนคอมมิต "ดี" อาจเป็นแท็กของรุ่นเก่าหรือคอมมิตจากเมื่อสองสามวันก่อน

กำหนดขอบเขตของคอมมิต

เมื่อเริ่ม git bisect แล้ว คุณจะกำหนดช่วงการค้นหา:

  • คอมมิตเสีย: คอมมิตที่คุณทราบว่ามีข้อผิดพลาด ใช้ git bisect bad <commit-hash> หรือใช้ git bisect bad ได้เลยหากเป็น HEAD ปัจจุบันของคุณ
  • คอมมิตดี: คอมมิตที่คุณทราบว่าไม่มีข้อผิดพลาด ใช้ git bisect good <commit-hash>

จากนั้น Git จะเช็กเอาต์คอมมิตที่อยู่กึ่งกลางของช่วงนี้โดยอัตโนมัติ

ทดสอบและจำกัดขอบเขต

หลังจากทำเครื่องหมายคอมมิตดีและคอมมิตเสียแล้ว Git จะเช็กเอาต์คอมมิตที่อยู่กึ่งกลางช่วงโดยอัตโนมัติ หน้าที่ของคุณคือทดสอบโค้ดในคอมมิตที่เช็กเอาต์นี้

  • หากมีข้อผิดพลาดอยู่ ให้พิมพ์ git bisect bad
  • หากไม่มีข้อผิดพลาดอยู่ ให้พิมพ์ git bisect good

จากนั้น Git จะเลือกคอมมิตกึ่งกลางรายการถัดไปจากช่วงที่เหลือ คุณจะทำซ้ำขั้นตอนนี้จนกว่า Git จะพบคอมมิต "เสีย" รายการแรก

จำลองการทำให้เกิดข้อผิดพลาด

ลองนึกภาพ "ข้อผิดพลาด" ง่าย ๆ ในสคริปต์ เราจะจำลองประวัติโครงการที่มีการนำข้อผิดพลาดเล็กน้อยเข้ามา

นี่คือสคริปต์เริ่มต้นที่ "ดี" ของเรา:

main.sh

#!/bin/bash
echo "Hello from script!"
sum=0
for i in $(seq 1 3); do
  sum=$((sum + i))
done
echo "Sum is: $sum"

สาธิตการค้นหาแบบทวิภาคด้วยตนเอง

ตอนนี้สมมติว่าคอมมิตในภายหลังเผลอเปลี่ยนลูปเป็น seq 1 4 ทำให้ผลรวมไม่ถูกต้อง (10 แทนที่จะเป็น 6)

เราจะเริ่มด้วย:

git bisect start

จากนั้นทำเครื่องหมาย HEAD ปัจจุบันของเรา (จุดที่มีข้อผิดพลาด) ว่าเป็นคอมมิตเสีย:

git bisect bad HEAD

และทำเครื่องหมายคอมมิตเก่าที่ทราบว่าใช้งานได้ว่าเป็นคอมมิตดี:

git bisect good <old_good_commit_hash>

จากนั้น Git จะนำทางคุณโดยเช็กเอาต์คอมมิตต่าง ๆ คุณจะเรียกใช้ ./main.sh ตรวจดูว่าผลรวมเป็น 6 หรือ 10 แล้วพิมพ์ git bisect good หรือ git bisect bad ตามผลที่ได้

ทำให้กระบวนการแก้ไขข้อผิดพลาดเป็นอัตโนมัติ

การทดสอบแต่ละคอมมิตด้วยตนเองอาจยังใช้เวลานาน หากการทดสอบซับซ้อน git bisect run ช่วยทำให้ขั้นตอนนี้เป็นอัตโนมัติได้!

คุณระบุสคริปต์ที่จบการทำงานด้วยค่า:

  • 0 (ศูนย์) หากคอมมิตนั้นดี
  • 125 หากควรข้ามคอมมิตนั้น
  • ค่าอื่นที่ไม่ใช่ศูนย์ (เช่น 1) หากคอมมิตนั้นเสีย

Git จะเรียกใช้สคริปต์นี้กับคอมมิตแต่ละรายการที่ทดสอบ จนกว่าจะพบข้อผิดพลาด

#!/bin/bash
./main.sh | grep "Sum is: 6"
if [ $? -eq 0 ]; then
  exit 0 # Good commit
else
  exit 1 # Bad commit
fi

จบการค้นหาของคุณ

เมื่อ git bisect ระบุคอมมิตเสียรายการแรกได้สำเร็จ ระบบจะแจ้งแฮชคอมมิตและข้อความของคอมมิตนั้น

หลังจากพบต้นเหตุและเข้าใจปัญหาแล้ว สิ่งสำคัญคือต้องรีเซ็ตคลังของคุณกลับสู่สถานะเดิมก่อนเริ่มการค้นหาแบบทวิภาค:

git bisect reset

คำสั่งนี้จะนำคุณกลับไปยังคอมมิตที่คุณอยู่ก่อนเริ่มการค้นหา พร้อมล้างสถานะการค้นหาแบบทวิภาคชั่วคราว

ตรวจสอบความรู้เรื่องการค้นหาแบบทวิภาค

คุณเพิ่งเรียกใช้ git bisect start ทำเครื่องหมาย HEAD ปัจจุบันว่าเป็นคอมมิตเสีย และทำเครื่องหมายคอมมิตเก่าว่าเป็นคอมมิตดี Git เช็กเอาต์คอมมิตที่อยู่กึ่งกลาง

คุณเรียกใช้การทดสอบ และพบว่าข้อผิดพลาดมีอยู่ในคอมมิตกึ่งกลางนี้

สรุป <code>git bisect</code>

ยินดีด้วย! คุณได้เรียนรู้วิธีใช้ git bisect แล้ว:

  • เป็นเครื่องมืออันทรงพลังสำหรับค้นหาคอมมิตที่แน่นอนซึ่งทำให้เกิดข้อผิดพลาด
  • ใช้การค้นหาแบบทวิภาคเพื่อประสิทธิภาพ
  • คุณกำหนดคอมมิต "ดี" (ไม่มีข้อผิดพลาด) และ "เสีย" (มีข้อผิดพลาด)
  • คุณสามารถทำให้กระบวนการทดสอบเป็นอัตโนมัติด้วย git bisect run <script>
  • อย่าลืมเรียกใช้ git bisect reset เพื่อเก็บกวาดหลังการค้นหาเสมอ!

คำถามที่พบบ่อย

บทเรียน “Git Bisect สำหรับการแก้ไขข้อบกพร่อง” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “Git Bisect สำหรับการแก้ไขข้อบกพร่อง” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Git & GitHub Professional Workflow ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Git & GitHub Professional Workflow มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “Git Bisect สำหรับการแก้ไขข้อบกพร่อง”

ใช้ `git bisect` เพื่อค้นหาคอมมิตเฉพาะที่ทำให้เกิดข้อบกพร่องได้อย่างมีประสิทธิภาพ ช่วยประหยัดเวลาในการแก้ไขข้อบกพร่อง คุณปฏิบัติ Git & GitHub Professional Workflow ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Git & GitHub Professional Workflow หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Git & GitHub Professional Workflow บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน

บทเรียน “Git Bisect สำหรับการแก้ไขข้อบกพร่อง” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Git & GitHub Professional Workflow นี้ได้ไหม

ได้ บทเรียน Git & GitHub Professional Workflow ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. Git Reflog และการกู้คืนประวัติ
  2. Git Bisect สำหรับการแก้ไขข้อบกพร่อง
  3. การบำรุงรักษาและจัดระเบียบคลังเก็บ
  4. การเขียนประวัติใหม่ด้วย git filter-repo
← กลับไปที่ Git & GitHub Professional Workflow