الدمج مقابل إعادة الأساس - دليل اتخاذ القرار

3 دقيقة

جدول المحتويات

  1. المعضلة
  2. شرح الدمج
  3. شرح إعادة الأساس
  4. جدول مقارن
  5. دليل القرار

1. المعضلة

تطوّر على فرع. تقدّم main. كيف تدمج؟

    A---B---C main
   /
  D---E feature-branch

خياران:

  • الدمج: الدمج مع إيداع دمج
  • إعادة الأساس: «نقل» إيداعاتك بعد main

أيهما تختار؟ يعتمد على هدفك!

العودة إلى جدول المحتويات

2. شرح الدمج

الأمر:

bash
git checkout main
git merge feature-branch

النتيجة البصرية:

    A---B---C-------M main
   /               /
  D---E-----------/  (M = merge commit)

ما يحدث:

  1. ينشئ Git إيداعاً جديداً (M)
  2. يجمع هذا الإيداع تغييرات الفرعين
  3. يُظهر السجل أنه كان هناك خطّان تطوير

المزايا:

  • سجل صادق: نرى أنه كان هناك تطويران متوازيان
  • بسيط: أمر واحد، حل تعارض واحد
  • آمن: لا يغيّر الإيداعات الموجودة أبداً
  • قياسي: المقاربة الافتراضية في معظم الفرق

العيوب:

  • سجل معقّد: كثير من إيداعات الدمج
  • أقل قابلية للقراءة: يصعب تتبّع التطوّر الخطّي

العودة إلى جدول المحتويات

3. شرح إعادة الأساس

الأمر:

bash
git checkout feature-branch
git rebase main

النتيجة البصرية:

    A---B---C---D'---E' main

ما يحدث:

  1. «يفصل» Git إيداعاتك D و E
  2. «يعيد تشغيلها» بعد الإيداع C
  3. ينشئ إيداعات جديدة D' و E' (نفس التغييرات، تجزئات جديدة)
  4. يصبح السجل خطّياً

المزايا:

  • سجل نظيف: خط مستقيم سهل القراءة
  • دمج fast-forward: بلا إيداع دمج
  • يشبه القصة: كأنك طوّرت بعد main

العيوب:

  • يعيد كتابة السجل: D و E يصبحان D' و E'
  • أعقد: قد تحتاج عدة حلول تعارض
  • خطير: لا تعِد أساساً لإيداعات مشتركة أبداً!

العودة إلى جدول المحتويات

4. جدول مقارن

المعيارالدمجإعادة الأساس
السجليحفظ الفروع المتوازيةيجعل كل شيء خطّياً
الإيداعاتيضيف إيداع دمجيعيد كتابة الإيداعات
التعقيدبسيط (أمر واحد)أعقد
التعارضاتحل واحد كحد أقصىعدة حلول ممكنة
الأمانآمن جداًخطير إن أُسيء استخدامه
القابلية للتتبّعترى متى أُنشئت الفروع ودُمجتتفقد المعلومة الزمنية
التعاونمثالي للفريقانتبه للإيداعات المشتركة
القابلية للقراءةمعقّد مع كثرة الفروعواضحة جداً وخطّية

العودة إلى جدول المحتويات

5. دليل القرار

استخدم الدمج عندما:

الأوضاع:

  • تبدأ مع Git
  • تعمل ضمن فريق
  • تريد الاحتفاظ بالسجل «الحقيقي»
  • تريد الحل الأكثر أماناً
  • تدمج فروعاً طويلة الأمد

الأوامر:

bash
git checkout main
git pull origin main
git merge feature-branch
git push origin main

استخدم إعادة الأساس عندما:

الأوضاع:

  • تريد سجلاً نظيفاً وخطّياً
  • فرعك قصير وشخصي
  • لم تشارك إيداعاتك بعد
  • يفضّل فريقك السجل الخطّي
  • تتقن Git جيداً

الأوامر:

bash
git checkout feature-branch
git rebase main               # حل التعارضات إن لزم
  git checkout main
git merge feature-branch      # Fast-forward merge
  git push origin main
  ```

### **القاعدة الذهبية:**

**لا تعِد أساساً لإيداعات مشتركة أبداً!**

```bash
# خطر - لا تفعل هذا أبداً:
git push origin feature-branch    # إيداعات مشتركة
git rebase main                   # إعادة كتابة إيداعات مشتركة = فوضى الفريق

# مقبول - إعادة أساس محلية فقط:
git rebase main                   # إيداعات ما زالت محلية = مقبول
git push origin feature-branch    # دفع بعد إعادة الأساس = مقبول

توصية حسب المستوى:

المستوىالاستراتيجية الموصى بها
مبتدئدائماً الدمج
متوسطالدمج للتعاون، إعادة الأساس للتنظيف المحلي
خبيريقرّر الفريق استراتيجية متسقة

استراتيجيات فرق شائعة:

  1. «الدمج فقط»: بسيط، آمن، سجل كامل
  2. «إعادة أساس ثم دمج»: إعادة أساس محلية + دمج على main
  3. «دمج squash»: إيداع واحد لكل ميزة (أسلوب GitHub)

المهم = الاتساق داخل الفريق، لا الكمال التقني!

العودة إلى جدول المحتويات