ما هو git rebase -i (إعادة أساس تفاعلية)؟

في عالم تطوير البرمجيات، يعد نظام التحكم بالإصدار Git أداة قوية لإدارة ومتابعة التغييرات في الكود. واحدة من الميزات المتقدمة التي يوفرها Git هي git rebase -i، والمعروفة أيضًا بإعادة الأساس التفاعلية (Interactive Rebase). في هذه المقالة، سنستعرض بشكل شامل ما هو git rebase -i، وكيف يمكن استخدامه لتحسين تاريخ المستودع، مع نصائح عملية لتجنب الأخطاء الشائعة.

ما هو git rebase؟

قبل الخوض في التفاصيل حول الوضع التفاعلي، من المهم فهم الأساسيات. git rebase هي أداة تُستخدم لإعادة تطبيق الكوميتات (التغييرات) من فرع معين إلى فرع آخر. الهدف من git rebase هو إنشاء تاريخ أكثر ترتيبًا ونظافة، مما يسهل قراءة وفهم التطويرات.

بشكل أساسي، بدلاً من دمج (merge) الكود مع الاحتفاظ بتاريخ التشعبات، يعيد git rebase كتابة التاريخ لجعله يبدو وكأن كل التغييرات تمت بشكل متسلسل. هذا يمكن أن يكون مفيدًا جدًا في المشاريع التعاونية التي تتطلب تاريخًا نظيفًا وواضحًا.

ما هو git rebase -i؟

الوضع التفاعلي (-i) هو ميزة إضافية لـ git rebase تتيح للمستخدمين مزيدًا من التحكم في الكوميتات أثناء عملية إعادة الأساس. باستخدام git rebase -i، يمكنك:

  • دمج عدة كوميتات في كوميت واحد (squash).
  • إعادة ترتيب الكوميتات.
  • تحرير رسالة كوميت معينة.
  • حذف كوميتات غير ضرورية.
  • تنفيذ تعديلات إضافية على الكود.

يعتبر git rebase -i أداة قوية لتنظيف التاريخ وتوضيحه قبل نشره على الفرع الرئيسي أو مشاركة العمل مع الزملاء.

كيفية استخدام git rebase -i

1. تحديد الكوميتات

لاستخدام git rebase -i، يجب أولاً تحديد الكوميتات التي ترغب في التفاعل معها. يتم ذلك عن طريق تحديد نطاق الكوميتات باستخدام معرف الكوميت (SHA) أو عن طريق استخدام عدد معين من الخطوات السابقة.

git rebase -i HEAD~4

الأمر أعلاه يعني أنك تريد التفاعل مع آخر 4 كوميتات.

2. واجهة التحرير التفاعلية

عند تشغيل الأمر، يفتح Git محرر النصوص الافتراضي لديك ويعرض قائمة بالكوميتات المحددة. ستظهر القائمة بهذا الشكل:


pick 123abc إضافة ميزة جديدة
pick 456def إصلاح خطأ في الكود
pick 789ghi تحسين الأداء
pick 012jkl تحديث الوثائق

هنا، الكلمة pick تشير إلى أن Git سيقوم بالاحتفاظ بالكوميت كما هو.

3. التعديلات الممكنة

يمكنك تعديل الكلمة pick لأي من الخيارات التالية:

  • squash: دمج الكوميت مع الكوميت السابق.
  • edit: تعديل الكود الخاص بالكوميت.
  • reword: تغيير رسالة الكوميت.
  • drop: حذف الكوميت.

على سبيل المثال، إذا أردت دمج الكوميتين الأخيرين، يمكنك تعديل القائمة لتبدو هكذا:


pick 123abc إضافة ميزة جديدة
pick 456def إصلاح خطأ في الكود
squash 789ghi تحسين الأداء
pick 012jkl تحديث الوثائق

4. حفظ التعديلات

بعد تعديل القائمة، احفظ وأغلق الملف. سيبدأ Git في تنفيذ التعديلات وفقًا للإعدادات التي قمت بتحديدها.

5. التعامل مع التعارضات

في بعض الحالات، قد تواجه تعارضات أثناء عملية إعادة الأساس. إذا حدث ذلك، ستحتاج إلى حل التعارضات يدويًا باستخدام أدوات مقارنة مثل diff أو المحررات المدمجة مع Git. بعد حل التعارضات، قم بتنفيذ الأوامر التالية:

git add .  
git rebase --continue

أفضل الممارسات عند استخدام git rebase -i

  • لا تعيد الأساس على الفروع المشتركة: يمكن أن يؤدي ذلك إلى تعارضات أو فقدان بيانات بين أعضاء الفريق.
  • اختبر الكود بعد كل تعديل: تأكد من أن الكود يعمل بشكل صحيح بعد إجراء أي تغييرات.
  • احتفظ بنسخة احتياطية: استخدم git branch لإنشاء نسخة احتياطية قبل البدء في إعادة الأساس.

مقارنة بين git merge وgit rebase

قد يتساءل البعض عن الفرق بين merge وrebase. ببساطة، merge يحتفظ بتاريخ الكوميتات الأصلية، بينما rebase يعيد ترتيبها لجعلها أكثر تسلسلًا ونظافة. إليك مقارنة موجزة:

الميزة git merge git rebase
الحفاظ على التاريخ نعم لا
سهولة القراءة أقل أعلى
احتمالية التعارض منخفضة مرتفعة

الخاتمة

يُعد git rebase -i أداة قوية لتنظيم وتحسين تاريخ المشروع. من خلال فهم كيفية استخدامه بفعالية، يمكن للمطورين تحسين التعاون، تقليل الأخطاء، وإنشاء سجل تغييرات واضح ومقروء. تذكر دائمًا أن تعيد الأساس بحذر، خاصةً عند العمل على مستودعات مشتركة.

إذا كنت جديدًا على git rebase، جربه أولاً على مشاريع شخصية قبل استخدامه في بيئة العمل. مع الوقت والممارسة، ستصبح هذه الأداة جزءًا أساسيًا من سير عملك في التطوير.