ترتيب السجل باستخدام rebase (والقاعدة الذهبية)
هذا هو أكثر موضوع مربك في الدورة، لذا سنتقدم ببطء. في الدرس السابق رأينا merge — طريقة واحدة لدمج العمل من فرع، تترك commit دمج وتحتفظ بكلا المسارين كما حدثا فعلاً. الآن نتعرف على طريقة ثانية، git rebase: فهي 'تعيد تشغيل' commits فرعك بحيث تبدأ من أحدث نقطة في فرع آخر، مانحةً إياك سجلاً مستقيماً ونظ
rebase أشبه بأخذ الصفحات التي كتبتها وإعادة نسخها في نهاية دفتر الفريق المُحدَّث — كأنك كتبتها هناك منذ البداية. تبدو النتيجة مرتبة ومستقيمة، لكنها صفحات جديدة. لذا لا تُعِد نسخ الصفحات التي سلّمتها للآخرين بالفعل — فما زالت لديهم الصفحات القديمة، وهذا يخلق بلبلة.
- git rebase
- يعيد تشغيل commits الفرع الحالي بحيث تبدأ من رأس فرع آخر، منشئاً سجلاً خطياً. تُستبدل الـ commits الأصلية بـ commits جديدة بـ hashes جديدة.
- السجل الخطي (linear history)
- سجل هو خط مستقيم واحد من الـ commits، بلا تفرّعات وبلا commit دمج — كل commit يجلس مباشرة فوق سابقه.
- القاعدة الذهبية (golden rule)
- لا تُجرِ rebase أبداً على commits سبق أن دفعتها (push) أو شاركتها مع آخرين. rebase يعيد كتابة الـ hashes، لذا فهو آمن فقط على العمل المحلي الخاص.
- hash الـ commit
- المعرّف الفريد لكل commit (بصمة). إذا تغيّر أي شيء في الـ commit — بما في ذلك الـ parent الخاص به — فإنه يحصل على hash جديد، وبذلك يصبح commit مختلفاً.
- إعادة التشغيل (replay)
- العملية التي يأخذ فيها rebase كلاً من commits الخاصة بك ويعيد تطبيقه، واحداً تلو الآخر، فوق رأس الفرع الآخر — هكذا تُنشأ الـ commits الجديدة.