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>...الخيارات
اختيار الخيار المناسب
الاختبارات اللازمة
البحث الثنائي يقسم المشتبه بهم إلى النصف في كل مرة
| الأمر | اختبارات 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العودة إلى فرعك.
أمثلة على سير العمل
git bisect start HEAD v1.0سيئ الآن، جيد في v1.0
git bisect good / git bisect badاختبار كل commit يستخرجه git
git bisect resetالعودة إلى فرعك
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 منفصل.
- ✗البدء بتغييرات غير مسجَّلة تعيق عمليات الاستخراج.
الأسئلة الشائعة
نعم: git bisect start --term-old=fast --term-new=slow، مثلًا لمعرفة متى صار شيء ما بطيئًا.