تخطَّ إلى المحتوى

🔀 شرح Git

إعادة الأساس التفاعلية (Interactive Rebase)

الدرس 30 من 32· ⏱ 2 دقائق قراءة

الفرق عن rebase العادي

في الدرس السابق استخدمنا git rebase main لنقل فرعك فوق آخر تحديث. rebase التفاعلي (-i) يفعل شيئًا مختلفًا: يتيح لك تعديل commits فرعك نفسها — قبل نقلها أو حتى بدون نقلها لفرع آخر — عبر قائمة تحرّرها.

git rebase -i HEAD~3     # آخر 3 commits على فرعك الحالي

يفتح محرّرًا بقائمة كهذه:

pick a1b2c3d إضافة نموذج تسجيل الدخول
pick e4f5g6h إصلاح خطأ إملائي
pick i7j8k9l تعديل تسمية الحقل

أوامر القائمة

الأمرماذا يفعل
pickيُبقي الـ commit كما هو (الافتراضي)
rewordيُبقي الـ commit لكن يفتح محررًا لتعديل رسالته
editيتوقّف عند هذا الـ commit لتعديل محتواه بالكامل
squashيدمج هذا الـ commit مع السابق، ويجمع الرسالتين
fixupمثل squash لكن يتجاهل رسالة هذا الـ commit
dropيحذف الـ commit نهائيًا
execينفّذ أمر شل (مثلًا اختبار) بين الـ commits

⚠️ لا تحذف أو تُعدّل الـ hash في بداية كل سطر — فقط غيّر اسم الأمر.

مثال: دمج 3 commits في واحد

الوضع أعلاه فيه commit رئيسي وتصحيحان صغيران لا يستحقّان سطرًا خاصًا بهما في التاريخ. غيّر القائمة إلى:

pick a1b2c3d إضافة نموذج تسجيل الدخول
fixup e4f5g6h إصلاح خطأ إملائي
fixup i7j8k9l تعديل تسمية الحقل

احفظ وأغلق المحرّر — تحصل على commit واحد نظيف برسالة "إضافة نموذج تسجيل الدخول" فقط، وكأنك كتبته صحيحًا من أول مرّة.

💡 استخدم squash بدل fixup إذا أردت الاحتفاظ برسائل كل الـ commits المدموجة ودمجها في رسالة واحدة تحرّرها بنفسك.

عند التعارض أو التراجع

git add .
git rebase --continue    # بعد حلّ التعارض
git rebase --abort       # يلغي كل العملية ويعيدك للوضع قبل البدء

متى تستخدمه؟

  • قبل فتح Pull Request: نظّف تاريخ فرعك ليكون واضحًا للمراجع — commit واحد لكل ميزة منطقية بدل عشرة commits "wip".
  • لتعديل رسالة commit قديمة لم تُدفع بعد.

القاعدة الذهبية من الدرس السابق تنطبق هنا بقوة أكبر: rebase التفاعلي يعيد كتابة hashes الـ commits بالكامل — لا تستخدمه أبدًا على فرع دفعته وأشخاص آخرون يعملون عليه.

🎯 التالي: البحث الثنائي عن الأخطاء (Git Bisect).

شرح إعادة الأساس التفاعلية (Interactive Rebase) — Git بالعربي
إعادة الأساس التفاعلية (Interactive Rebase)Git بالعربي · The Code Fix

📚 لمزيد من التعمّق في Git، راجِع التوثيق الرسمي لـ Git.

هل كان هذا الدرس مفيدًا؟