git bisect

تتبّع الأخطاء

العثور على الـ commit الذي أدخل خطأً بالبحث الثنائي


يجد الأمر 'git bisect' الـ commit الذي أدخل خطأً. توسم commit سيئًا (bad، فيه الخطأ) وآخر جيدًا (good، ليس فيه)؛ يستخرج git الـ commit الأوسط، فتختبره وتجيب good أو bad، ويقسم git المشتبه بهم إلى النصف مجددًا حتى يبقى واحد. حتى ألف commit لا تحتاج إلا نحو عشرة اختبارات. يعيدك git bisect reset إلى حيث بدأت.

الصيغة

git bisect start [<bad> [<good>...]]
git bisect (bad | good) [<rev>...]
git bisect skip [<rev>...]
git bisect reset
git bisect log
git bisect run <cmd>...
[ ] اختياري| أو<arg> قيمة تُستبدل... قابل للتكرار--flag خيار

الخيارات

انقر على أي خيار لتوسيعه

مبتدئ (4)

بدء جلسة؛ ويمكن إعطاء الـ commit السيئ ثم الجيدة مباشرة.

موصى بهوفّر أمرين: سمِّ bad وgood دفعة واحدة

مثال

git bisect start HEAD v1.0

الـ commit الحالي لا يمكن اختباره؛ اختر غيره.

عند الحاجةالمتابعة حين لا يمكن اختبار commit

مثال

git bisect skip

عرض كل أمر وإجابة في الجلسة الحالية.

عند الحاجةمراجعة جلسة bisect أو إعادة تشغيلها

مثال

git bisect log

إنهاء الجلسة والعودة إلى الفرع الذي بدأت منه.

موصى بهأنهِ جلسة bisect به دائمًا

مثال

git bisect reset

متقدم (1)

تشغيل أمر على كل مرشَّح: رمز الخروج 0 = جيد، 1–127 = سيئ، 125 = تخطٍّ.

موصى بهbisect آلي بالكامل بسكربت اختبار

مثال

git bisect run npm test

اختيار الخيار المناسب

الاختبارات اللازمة

البحث الثنائي يقسم المشتبه بهم إلى النصف في كل مرة

الأمراختبارات bisect
10 commitsنحو 4
100 commitsنحو 7
1000 commitsنحو 10

أمثلة

بدء جلسة

git bisect start

يبدأ البحث.


وسم الـ commits

git bisect bad && git bisect good v1.0

الـ commit الحالي سيئ، وv1.0 كان جيدًا.


الأتمتة

git bisect run npm test

دع سكربت اختبار يجيب عنك.


الإنهاء

git bisect reset

العودة إلى فرعك.

أمثلة على سير العمل

1
git bisect start HEAD v1.0

سيئ الآن، جيد في v1.0

2
git bisect good / git bisect bad

اختبار كل commit يستخرجه git

3
git bisect reset

العودة إلى فرعك

4
git revert <first-bad>

التراجع عن المتسبِّب

حل المشكلات

You need to start by "git bisect start"

السبب: لا توجد جلسة قيد التشغيل

شغّل git bisect start أولًا

أُعطيت إجابة خاطئة

السبب: كل الخطوات اللاحقة مبنية عليها

git bisect log > log.txt، صحّح السطر، git bisect reset، git bisect replay log.txt

نصائح وأخطاء شائعة

أفضل الممارسات

  • ✓اكتب اختبارًا آليًا واستخدم git bisect run.
  • ✓أنهِ دائمًا بـ git bisect reset.

أخطاء متكررة

  • ✗الإجابة الخاطئة مرة واحدة — فتصبح كل الخطوات اللاحقة خاطئة (تحقّق بـ git bisect log).
  • ✗نسيان git bisect reset ومواصلة العمل على HEAD منفصل.
  • ✗البدء بتغييرات غير مسجَّلة تعيق عمليات الاستخراج.

الأسئلة الشائعة

A:

نعم: git bisect start --term-old=fast --term-new=slow، مثلًا لمعرفة متى صار شيء ما بطيئًا.