git rebase
إعادة بناء تاريخ خطّي git rebase
git rebase ينقل commits فرعك ليبدأ من أحدث نقطة في فرع آخر، فيُنتج تاريخًا خطّيًا نظيفًا بلا commits دمج.
بدل دمج فرعين عبر merge commit، rebase يعيد تطبيق commits فرعك واحدًا تلو الآخر فوق آخر نسخة من الفرع الهدف — كأن عملك بدأ للتوّ من هناك. النتيجة تاريخ خطّي يسهل قراءته، لكن الثمن أن hashes الـ commits تتغيّر بالكامل لأنها تُعاد كتابتها فعليًا.
هذا يجعله ممتازًا لتنظيف فرع محلّي قبل فتح Pull Request، وخطيرًا على أي فرع تمّت مشاركته مع آخرين بالفعل.
الصياغة
git rebase <الفرع-الهدف>
📄 مثال
git switch feature git rebase main # عند تعارض git add . git rebase --continue git rebase --abort # للتراجع الكامل عن العملية
أهم الخيارات
| الخيار | الوظيفة |
|---|---|
| -i / --interactive | يفتح قائمة تفاعلية لتعديل/دمج/حذف commits قبل تطبيقها |
| --continue | يتابع العملية بعد حلّ تعارض |
| --abort | يلغي rebase بالكامل ويعيد الفرع لحالته قبل البدء |
💡 نصائح عملية
- حدّث فرعك قبل فتح Pull Request بـ rebase على main — يمنع تعارضات لاحقة عند الدمج
- استخدم rebase -i لدمج (squash) عدّة commits صغيرة في واحد واضح قبل المراجعة
⚠️ أخطاء شائعة
- استخدام rebase على فرع مشترك مدفوع بالفعل — يربك كل من سحب النسخة القديمة
- الخلط بين rebase و merge كأنهما نفس الشيء لأن النتيجة النهائية للكود متشابهة، لكن شكل التاريخ مختلف تمامًا
خصائص ذات صلة
🎓 تريد فهم الصورة الكاملة خطوة بخطوة؟ ابدأ من مسار GIT الكامل بالعربي.