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

٢٠ يوليو ٢٠٢٦

الفرق بين Git Rebase و Merge بالعربي

شارك المقال:

من أكتر الأسئلة يلي بتلخبط المبرمجين الجداد بـ Git: ليش فيه طريقتين (merge وrebase) لدمج فرع بفرع؟ الاثنين بيوصلوك لنفس النتيجة النهائية (كودك مدموج)، لكن الفرق بشكل التاريخ (history) يلي بيضل بمشروعك.

شو بيعمل git merge؟

git merge بياخد التغييرات من فرع وبيدمجها بفرعك الحالي، وبيضيف commit دمج جديد (merge commit) بيربط الفرعين مع بعض:

git checkout main
git merge feature-login

النتيجة: تاريخ فيه كل الـ commits الأصلية بترتيبها الحقيقي، بالإضافة لـ commit دمج واحد بالنهاية. هيدا التاريخ الحقيقي والدقيق لما صار فعليًا — مين عمل شو ومتى.

شو بيعمل git rebase؟

git rebase بياخد commits فرعك ويعيد تطبيقها فوق آخر نسخة من الفرع التاني، كإنه بيعيد كتابة القصة من جديد بترتيب خطي:

git checkout feature-login
git rebase main

النتيجة: تاريخ خطي بالكامل بلا أي commit دمج — كإن كل شغلك صار بعد آخر تحديث لـ main مباشرة، حتى لو فعليًا اشتغلت عليه بالتوازي.

الفرق بجدول

المعيارmergerebase
شكل التاريخمتشعّب (فيه commit دمج)خطي نظيف
يغيّر commit hashes قديمة؟لانعم (بيعيد كتابتها)
آمن على فرع مشترك مرفوع؟نعم دائمًالا — خطير
الأنسب لـفروع طويلة، فرق كبيرةفروع شخصية قبل الرفع

القاعدة الذهبية

لا تعمل rebase أبدًا لفرع رفعته (push) already وناس تانيين ساحبينه.

السبب: rebase بيغيّر الـ commit hashes بالكامل. لو حدا تاني عنده نسخة قديمة من نفس الفرع وسحب تحديثاتك بعد الـ rebase، Git رح يشوف كل شي كـ commits جديدة كليًا، وبتصير تعارضات (conflicts) فوضوية صعبة الحل.

القاعدة البسيطة:

  • فرعك المحلي، لسا ما رفعته؟ → rebase آمن، نظّف تاريخك قبل ما ترفع.
  • فرع مرفوع ومشترك مع فريق؟ → merge دائمًا، ما تلمس تاريخه.

مثال عملي: قبل ما ترفع Pull Request

سيناريو شائع جدًا: اشتغلت على فرعك يومين، وبنفس الوقت زملاءك ضافوا commits جديدة على main. قبل ما تفتح Pull Request، تقدر تعمل:

git checkout feature-login
git rebase main

هيك فرعك بيصير مبني فوق آخر نسخة من main مباشرة، بلا تعارضات لاحقة عند الدمج، وبتاريخ نظيف يسهل مراجعته بالـ Pull Request.

الخلاصة

مافي "الأفضل" بشكل مطلق — merge أأمن وبيحافظ على الحقيقة الكاملة، وrebase بيعطيك تاريخ أنظف بس بشرط واحد صارم: بس على فروع لسا ما مشاركتها مع حدا. تعلّم الاثنين، واستخدم الصح حسب الموقف.

ابدأ مسار Git الكامل بالعربي — من الأساسيات لحد rebase وworkflows متقدمة.

📚 مصادر رسمية للتعمّق: التوثيق الرسمي لـ Git

الأسئلة الشائعة

هل rebase خطير؟

خطير بس بحالة واحدة: إذا عملته على فرع already رفعته وناس تانيين بيشتغلوا عليه، لأنه بيعيد كتابة التاريخ ويغيّر الـ commit hashes، وهذا بيسبب تعارضات كبيرة لكل واحد سحب الفرع القديم. على فرعك الشخصي المحلي قبل ما ترفعه، rebase آمن تمامًا.

ليش أستخدم rebase أصلًا إذا merge بيعمل نفس الشغلة؟

rebase بيعطيك تاريخ خطي نظيف بلا commits دمج متشابكة، وهذا بيسهّل قراءة git log لاحقًا، خصوصًا بمشاريع فيها فروع كتيرة صغيرة. merge أبسط وأأمن لكن التاريخ بيصير متشعّب أكتر مع الوقت.

شو يعني rebase interactive؟

هو نفس مبدأ rebase العادي، لكن بيعطيك فرصة تعدّل، تدمج، أو تحذف commits قبل ما تطبّقهم — مفيد جدًا عشان تنضّف تاريخك (مثلًا تدمج كذا commit صغير بـ commit واحد واضح) قبل ما تفتح Pull Request.

اقرأ أيضًا

تصفّح كل المقالات في المدوّنة، أو ابدأ التعلّم من المسارات و خرائط الطريق.