Git Bisect สำหรับการแก้ไขข้อบกพร่อง
ใช้ `git bisect` เพื่อค้นหาคอมมิตเฉพาะที่ทำให้เกิดข้อบกพร่องได้อย่างมีประสิทธิภาพ ช่วยประหยัดเวลาในการแก้ไขข้อบกพร่อง
Git Bisect สำหรับการแก้ไขข้อบกพร่อง เป็นบทเรียน DevOps Bootcamp ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน DevOps Bootcamp และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส DevOps Bootcamp มีบทเรียนทั้งหมด 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) และปลดล็อคส่วนที่เหลือของคอร์ส DevOps Bootcamp ให้อัปเกรดเป็น CoddyKit PRO คอร์ส DevOps Bootcamp มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “Git Bisect สำหรับการแก้ไขข้อบกพร่อง”
ใช้ `git bisect` เพื่อค้นหาคอมมิตเฉพาะที่ทำให้เกิดข้อบกพร่องได้อย่างมีประสิทธิภาพ ช่วยประหยัดเวลาในการแก้ไขข้อบกพร่อง คุณปฏิบัติ DevOps Bootcamp ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน DevOps Bootcamp หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน DevOps Bootcamp บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “Git Bisect สำหรับการแก้ไขข้อบกพร่อง” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน DevOps Bootcamp นี้ได้ไหม
ได้ บทเรียน DevOps Bootcamp ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- Git Reflog และการกู้คืนประวัติ
- Git Bisect สำหรับการแก้ไขข้อบกพร่อง
- การบำรุงรักษาและจัดระเบียบคลังเก็บ
- การเขียนประวัติใหม่ด้วย git filter-repo