Git Rebase vs Merge
آخر تحديث
يدمج كل من git merge وgit rebase العمل من فرع إلى آخر. يربط git merge التاريخين معًا بكوميت دمج، محافظًا تمامًا على ما حدث. أما git rebase فيعيد تشغيل كوميتاتك واحدًا تلو الآخر فوق الفرع الآخر، منتجًا تاريخًا نظيفًا وخطيًا، لكنه يعيد كتابة كوميتاتك في هذه العملية.
القاعدة الذهبية: لا تُجرِ rebase أبدًا على كوميتات سحبها الآخرون بالفعل. جرّب كليهما في ساحة الطرفية — صدفة حقيقية في متصفحك.
جنبًا إلى جنب
| Behavior | git merge | git rebase |
|---|---|---|
| شكل التاريخ | متفرع، مع كوميت دمج | خطي |
| يعيد كتابة الكوميتات | لا | نعم |
| آمن على الفروع المشتركة | نعم | لا |
| يحافظ على التاريخ الدقيق | نعم | لا |
| سهولة تتبّع متى تم دمج الأشياء | نعم | أصعب |
الصياغة
| Command | What it does |
|---|---|
git merge feature | دمج feature في الفرع الحالي |
git merge --no-ff feature | إنشاء كوميت دمج دائمًا |
git rebase main | إعادة تشغيل كوميتات الفرع الحالي فوق main |
git rebase -i HEAD~3 | تحرير آخر 3 كوميتات بشكل تفاعلي |
git rebase --abort | إلغاء عملية rebase الجارية |
الأسئلة الشائعة حول git rebase vs merge
ما الفرق بين git rebase و git merge؟
يجمع
git merge بين فرعين بإنشاء كوميت دمج جديد يضم تاريخيهما، محافظًا على السجل الدقيق لما حدث. أما git rebase فينقل كوميتاتك بحيث يعاد تشغيلها فوق فرع آخر، منتجًا تاريخًا في خط مستقيم لكنه يعيد كتابة تلك الكوميتات بهاشات جديدة. يحافظ merge على التاريخ؛ بينما يعيد rebase كتابته من أجل النظافة.متى ينبغي أن أستخدم merge ومتى ينبغي أن أستخدم rebase؟
استخدم merge لدمج فرع مكتمل (خاصةً المشترك) — فهو آمن وغير مدمِّر. استخدم rebase لترتيب كوميتاتك المحلية الخاصة قبل مشاركتها، أو لتحديث فرع ميزة فوق أحدث
main للحصول على تاريخ نظيف. تُجري فرق كثيرة rebase محليًا، ثم merge إلى main.ما هي القاعدة الذهبية لـ rebase؟
لا تُجرِ rebase أبدًا على كوميتات بنى عليها آخرون عملهم بالفعل — عادةً أي شيء دفعته (push) إلى فرع مشترك. ولأن rebase يعيد كتابة الكوميتات، فإن القيام بذلك يجبر الجميع على التوفيق بين تاريخ متباعد. أجرِ rebase بحرية على الكوميتات المحلية غير المدفوعة؛ واستخدم merge (أو revert) لأي شيء أصبح عامًا بالفعل.
أيهما يسبب تعارضات أقل، rebase أم merge؟
لا يتجنّب أيٌّ منهما التعارضات، لكنهما يُظهرانها بطرق مختلفة. يحل merge جميع التعارضات دفعة واحدة، في كوميت الدمج. وقد يطلب منك rebase حل التعارضات كوميتًا تلو الآخر مع إعادة تشغيل كل واحد. إجمالي العمل متقارب؛ ما يفعله rebase هو توزيعه فقط.
هل يمكنني التدرّب على هذا عبر الإنترنت؟
نعم. افتح ساحة الطرفية لتشغيل
git merge وgit rebase في صدفة حقيقية داخل متصفحك — لا شيء لتثبيته. كما يغطي مساق Git التفاعلي المجاني من Coddy الدمج وrebase خطوة بخطوة.