الفروع واستراتيجيات الفروع

7 دقيقة

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


1 — لماذا الفروع؟

الفرع خط تطوير مستقل. يسمح بالعمل على ميزة جديدة أو تصحيح دون المساس بالشفرة المستقرة التي يستخدمها الآخرون.

فكّر في الفرع كمسودة منفصلة. يمكنك أن تجرّب فيه ما تشاء؛ ما دام لم تدمج، فعمل الآخرين لا يتأثر.

بلا فروع، يكتب الفريق كله في الملف نفسه في الوقت نفسه: فوضى مضمونة. مع الفروع، يتقدم كل شخص في ممره، ثم نجمع بنظافة.

الأوامر الأساسية التي رأيناها في الوحدة 01:

bash
# إنشاء فرع والانتقال إليه
git switch -c feature/login

# سرد الفروع
git branch

# العودة إلى main
git switch main
الإجراءالأمر الحديثالصيغة القديمة
إنشاء + انتقالgit switch -c nomgit checkout -b nom
انتقالgit switch nomgit checkout nom
سردgit branchgit branch
حذفgit branch -d nomgit branch -d nom

تمرين مصغّر — اكتب الأمر الحديث لإنشاء فرع feature/login والانتقال إليه دفعة واحدة.

عرض الحل

git switch -c feature/login (يكافئ الصيغة القديمة git checkout -b feature/login).

↑ العودة إلى الأعلى


2 — أنواع الفروع

في الفريق لا تُنشأ الفروع عشوائياً: نعطيها دوراً واسماً عرفياً. هذه أكثر الأنواع انتشاراً.

نوع الفرعالبادئة المعتادةالدورمدة الحياة
رئيسيmain (أو master)شفرة الإنتاج، مستقرة دائماًدائمة
تكاملdevelopيجمع الميزات الجاريةدائمة
ميزةfeature/تطوير ميزة جديدةقصيرة
إصدارrelease/التثبيت قبل وضع الإنتاجقصيرة
تصحيح عاجلhotfix/تصحيح خطأ حرج في الإنتاجقصيرة جداً

أمثلة أسماء واقعية:

bash
feature/ajout-paiement-stripe
feature/dashboard-utilisateur
release/1.4.0
hotfix/correction-faille-login

عرف تسمية جيد توثيق مجاني: من اسم الفرع وحده يعرف الفريق الموضوع.

تمرين مصغّر — يجب أن تصحّح على وجه السرعة ثغرة دخول في الإنتاج. أي بادئة فرع تستخدم، واقترح اسماً كاملاً.

عرض الحل

البادئة hotfix/ (تصحيح عاجل ينطلق من main). مثال: hotfix/correction-faille-login.

↑ العودة إلى الأعلى


3 — Git Flow

Git Flow استراتيجية منظَّمة قدّمها Vincent Driessen سنة 2010. تقوم على فرعين دائمين (main و develop) وثلاثة أنواع فروع مؤقتة (feature، release، hotfix).

الدورة النموذجية:

  1. ننطلق من develop لإنشاء فرع feature/*.
  2. بعد الانتهاء تُدمَج الـ feature في develop.
  3. عندما تكفي الميزات، ننشئ release/* للتثبيت.
  4. تُدمَج الـ release في main (وتُوسَم) و في develop.
  5. خطأ حرج في الإنتاج؟ ننشئ hotfix/* من main، ثم ندمجه في main و develop.
bash
# بدء ميزة (بلا إضافة git-flow)
git switch develop
git switch -c feature/panier

# ... عمل + إيداعات ...

git switch develop
git merge feature/panier
git branch -d feature/panier
المزاياالعيوب
منظَّم جداً، أدوار واضحةثقيل، فروع كثيرة
مثالي لـ إصدارات مخطَّطةسيئ التكيّف مع النشر المستمر
يفصل بوضوح التطوير والإنتاجدمج معقّد، خطر تعارضات

يتألق Git Flow للبرمجيات المسلَّمة بإصدارات (تطبيقات محمولة، برمجيات مثبَّتة). لموقع ويب يُنشَر 10 مرات في اليوم يصبح عائقاً.

↑ العودة إلى الأعلى


4 — GitHub Flow

GitHub Flow استراتيجية بسيطة وخفيفة، فكّرت لـ النشر المستمر. فرع دائم واحد: main. الباقي يمر بفروع feature قصيرة وطلبات سحب.

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

  1. main قابل للنشر دائماً.
  2. لكل عمل ننشئ فرعاً وصفياً من main.
  3. نودع بانتظام ونفتح طلب سحب (يُرى في الدرس 03).
  4. بعد المراجعة واختبارات خضراء، ندمج في main.
  5. ننشر main فوراً.
bash
git switch main
git pull
git switch -c feature/filtre-recherche
# ... إيداعات ...
git push -u origin feature/filtre-recherche
# → فتح طلب سحب على GitHub
المزاياالعيوب
بسيط، فروع قليلةيفترض تغطية اختبارات جيدة
مثالي للويب / SaaSأقل ملاءمة لإصدارات متعددة يجب إبقاؤها
يشجّع تسليماً صغيراً متكرراًيطلب انضباطاً على جودة main

GitHub Flow غالباً أفضل نقطة انطلاق لفريق حديث: هيكل كافٍ للتعاون، وخفة كافية للسرعة.

تمرين مصغّر — في GitHub Flow، اكتب الأمرين للانطلاق من main محدَّث قبل إنشاء فرع العمل.

عرض الحل
bash
git switch main
git pull

بعد ذلك فقط: git switch -c feature/....

↑ العودة إلى الأعلى


5 — Trunk-Based Development

Trunk-Based Development (التطوير على الجذع) يدفع البساطة أبعد: الجميع يدمج عمله في فرع واحد (trunk، أي main) مراراً جداً — مثاليًا عدة مرات في اليوم.

المبادئ الأساسية:

  • فروع الميزات صغيرة جداً وتعيش أقل من يوم.
  • الميزات غير المنتهية تُخفى خلف feature flags (أعلام) بدل فروع طويلة.
  • التكامل المستمر (CI) إلزامي: كل إيداع يشغّل بناء + اختبارات.
bash
# دورة قصيرة جداً
git switch main
git pull
# تعديل صغير...
git commit -am "إضافة زر التصدير"
git push      # مدمج في الجذع بعد دقائق
المزاياالعيوب
تكامل مستمر حقيقييتطلّب CI صلباً وسريعاً
يتجنّب «دمج الجحيم»يطلب كثيراً من الانضباط
ممارسة الفرق عالية الأداء (Google وغيرها)أعلام ميزات يجب إدارتها

أسوأ عدو لفرق Git الفروع التي تعيش أسابيع. كلما تأخر الدمج، صار ألماً. يحلّ trunk-based ذلك بالدمج المبكر والمتكرر.

تمرين مصغّر — في Trunk-Based، كيف تدمج ميزة غير منتهية دون إعاقة الآخرين ودون إنشاء فرع طويل؟

عرض الحل

نخفي الشفرة غير المكتملة خلف feature flag (علم ميزة): تُدمَج في الجذع لكنها معطَّلة للمستخدمين.

↑ العودة إلى الأعلى


6 — المقارنة واختيار الاستراتيجية

لا توجد استراتيجية كونية: الاختيار الجيد يعتمد على نوع المنتج ونضج الفريق ووتيرة النشر.

المعيارGit FlowGitHub FlowTrunk-Based
فروع دائمة2 (main + develop)1 (main)1 (main)
التعقيدمرتفعمنخفضمنخفض جداً
وتيرة التسليمبإصداراتمستمرةمستمرة جداً
مدة الفروعطويلةقصيرةقصيرة جداً (< يوم)
اختبارات آلية مطلوبةمرغوبةمهمةلا غنى عنها
الحالة المثاليةتطبيقات بإصدارات، محمولويب / SaaS، فريق متوسطفريق ناضج، CI قوي

نصيحة: معظم الفرق ينبغي أن تبدأ بـ GitHub Flow. يقدّم أفضل تسوية بين البساطة والأمان. ننتقل إلى trunk-based عندما ينضج CI، أو إلى Git Flow فقط إذا فرض المنتج إصدارات.

↑ العودة إلى الأعلى


7 — اختبار — استراتيجيات التفريع

السؤال 1: لماذا يُستخدم فرع Git أساساً؟

a) لنسخ المستودع احتياطياً على السحابة

b) للعمل بمعزل دون التأثير على الشفرة المستقرة

c) لضغط الملفات

d) لحذف السجل

عرض الحل

الإجابة: b) — الفرع خط تطوير مستقل يعزل العمل حتى الدمج.


السؤال 2: كم فرعاً دائماً يستخدم Git Flow؟

a) واحد (main)

b) اثنان (main و develop)

c) لا شيء

d) واحد لكل مطوّر

عرض الحل

الإجابة: b) — يقوم Git Flow على فرعين دائمين: main (إنتاج) و develop (تكامل).


السؤال 3: أي استراتيجية أنسب لموقع ويب يُنشَر عدة مرات في اليوم؟

a) Git Flow

b) GitHub Flow أو Trunk-Based

c) بلا فروع أصلاً

d) فرع لكل سنة

عرض الحل

الإجابة: b) — GitHub Flow (وأكثر منه Trunk-Based) مصمَّمان للنشر المستمر. Git Flow سيكون ثقيلاً جداً.


السؤال 4: في Trunk-Based Development، كيف نخفي ميزة غير منتهية؟

a) في فرع طويل لعدة أسابيع

b) بـ feature flag (علم ميزة)

c) بحذف الشفرة كل مساء

d) لا يمكن، يجب إنهاء الكل دفعة واحدة

عرض الحل

الإجابة: b) — تسمح أعلام الميزات بدمج شفرة غير مكتملة دون تفعيلها للمستخدمين، فنتجنّب الفروع الطويلة.


السؤال 5: أي بادئة فرع تُستخدم لتصحيح خطأ حرج مباشرة في الإنتاج؟

a) feature/

b) release/

c) hotfix/

d) develop/

عرض الحل

الإجابة: c) — فرع hotfix/ ينطلق من main لتصحيح خطأ عاجل، ثم يُدمَج في main و develop.

↑ العودة إلى الأعلى


8 — تطبيق عملي — تطبيق GitHub Flow

المطلوب

تعمل على مستودع main فيه مستقر. طُلب منك إضافة صفحة «حول». طبّق GitHub Flow:

  1. انطلق من main محدَّث.
  2. أنشئ فرع ميزة حسن التسمية.
  3. أودع إضافة الملف apropos.html.
  4. ادفع الفرع نحو المستودع البعيد لتحضير طلب سحب.
  5. اسرد فروعك للتحقق.

التصحيح

bash
# 1. الانطلاق من main محدَّث
git switch main
git pull origin main

# 2. إنشاء فرع وصفي
git switch -c feature/page-apropos

# 3. إنشاء الملف ثم إيداعه
echo "<h1>حول</h1>" > apropos.html
git add apropos.html
git commit -m "إضافة صفحة حول"

# 4. دفع الفرع نحو البعيد
git push -u origin feature/page-apropos

# 5. التحقق من الفروع
git branch

النتيجة المتوقعة:

الخطوةالتحقق
الفرع أُنشئgit branch يعرض * feature/page-apropos
الإيداع موجودgit log --oneline -1 يظهر «إضافة صفحة حول»
الفرع دُفعGit يعرض * [new branch] feature/page-apropos -> feature/page-apropos
التتبع معدّ-u يربط الفرع المحلي بالفرع البعيد
text
* feature/page-apropos
  main

الخطوة المنطقية التالية: فتح طلب سحب على GitHub لمراجعة هذا العمل ودمجه — هذا موضوع الدرس 03 بالضبط.

↑ العودة إلى الأعلى


9 — الخلاصة

النقاط التي يجب تذكّرها

  1. الفرع يعزل العمل دون التأثير على الشفرة المستقرة.
  2. أنواع الفروع: main، develop، feature/، release/، hotfix/ — لكل منها دور.
  3. Git Flow: منظَّم، فرعان دائمين، مثالي للإصدارات المخطَّطة.
  4. GitHub Flow: بسيط، فرع main + طلبات سحب، مثالي للويب.
  5. Trunk-Based: تكامل متكرر جداً على الجذع، يتطلّب CI صلباً.
  6. الاختيار يعتمد على المنتج والفريق ووتيرة النشر.

ما يلي

الآن وقد عرفت تنظيم فروعك، حان الدرس 02 — الدمج وإعادة الأساس: كيف تجمع هذه الفروع بنظافة وتحل التعارضات.

↑ العودة إلى الأعلى


جميع الحقوق محفوظة. يُحظَر نسخ هذه الدورة أو نشرها أو استخدامها أو تكييفها، كلياً أو جزئياً، دون إذن كتابي مسبق من الدكتور هيثم رحومة.

دورة من إعداد الدكتور هيثم رحومة — تطوير ونشر حلول البيانات