Git & GitHub

Git Workflow احترافي — دليل شامل 2026

📅 2026-11-29⏱ 7 دقائق قراءة
في المقال السابق، تعلمت حل التعارضات. الآن سنتعلم **Git Workflow** — وهو **نظام العمل** الذي يستخدمه الفريق المحترف. في هذا الدليل العملي، سنأخذك خطوة بخطوة لفهم Workflows المختلفة، مع تمارين وحلول. ## ما هو Git Workflow؟ **Git Workflow** هو **طريقة منظمة** لاستخدام Git في فريق. **يشمل:** - كيف تُنشئ الفروع. - كيف تدمجها. - من يوافق على الدمج. - كيف تُنشر الإصدارات. **الهدف:** تقليل الفوضى، وزيادة الإنتاجية. ## أشهر Workflows <table> <thead> <tr> <th>Workflow</th> <th>الوصف</th> <th>الاستخدام</th> </tr> </thead> <tbody> <tr> <td><strong>Git Flow</strong></td> <td>فروع متعددة</td> <td>الإصدارات الكبيرة</td> </tr> <tr> <td><strong>GitHub Flow</strong></td> <td>فرع main + feature</td> <td>النشر المستمر</td> </tr> <tr> <td><strong>Trunk-based</strong></td> <td>فرع رئيسي واحد</td> <td>الفرق السريعة</td> </tr> <tr> <td><strong>GitLab Flow</strong></td> <td>بيئات متعددة</td> <td>DevOps</td> </tr> </tbody> </table> ## 1. Git Flow **الأكثر تقليدية** — مناسب للمشاريع الكبيرة. ### الفروع: <table> <thead> <tr> <th>الفرع</th> <th>الوصف</th> </tr> </thead> <tbody> <tr> <td><strong>main</strong></td> <td>الإصدارات المستقرة</td> </tr> <tr> <td><strong>develop</strong></td> <td>التطوير الرئيسي</td> </tr> <tr> <td><strong>feature/*</strong></td> <td>ميزات جديدة</td> </tr> <tr> <td><strong>release/*</strong></td> <td>تحضير الإصدار</td> </tr> <tr> <td><strong>hotfix/*</strong></td> <td>إصلاحات عاجلة</td> </tr> </tbody> </table> ### الرسم البياني: ``` main ───●───────────────●────────●─── \ / \ release \ ● ● \ / \ develop ────●───●───●───●────────────────●─── / / / feature ●───●───● ``` ### مثال عملي: ```bash # 1. إعداد الفروع git checkout -b develop main # 2. ميزة جديدة git checkout -b feature/login develop # ... عمل git checkout develop git merge feature/login git branch -d feature/login # 3. تحضير إصدار git checkout -b release/1.0.0 develop # ... اختبار git checkout main git merge release/1.0.0 git tag -a v1.0.0 -m "الإصدار 1.0.0" git checkout develop git merge release/1.0.0 # 4. إصلاح عاجل git checkout -b hotfix/1.0.1 main # ... إصلاح git checkout main git merge hotfix/1.0.1 git tag -a v1.0.1 -m "الإصدار 1.0.1" git checkout develop git merge hotfix/1.0.1 ``` **المميزات:** - ✅ منظم جداً. - ✅ مناسب للإصدارات. - ✅ فصل التطوير عن الإنتاج. **العيوب:** - ❌ معقد. - ❌ بطيء. - ❌ غير مناسب للنشر المستمر. ## 2. GitHub Flow **الأبسط** — مناسب للنشر المستمر. ### القواعد: 1. **`main` دائماً مستقر.** 2. **فرع جديد لكل ميزة.** 3. **Pull Request للمراجعة.** 4. **نشر بعد الدمج.** ### الرسم: ``` main ───●───────●────────────●───────●─── \ / \ / feature ●───● ●───● ``` ### مثال عملي: ```bash # 1. ابدأ من main git checkout main git pull # 2. أنشئ فرعاً git checkout -b feature/new-feature # 3. اعمل git add . git commit -m "feat: ميزة جديدة" git push -u origin feature/new-feature # 4. افتح PR # ... مراجعة # 5. ادمج على GitHub # 6. ارجع محلياً git checkout main git pull git branch -d feature/new-feature ``` **المميزات:** - ✅ بسيط. - ✅ سريع. - ✅ مناسب للنشر المستمر. **العيوب:** - ❌ لا يفصل بين الإصدارات. - ❌ لا يدعم hotfixes بسهولة. ## 3. Trunk-based Development **الأسرع** — مناسب للفرق الخبيرة. ### القواعد: 1. **فرع واحد: `main`.** 2. **دمج يومي.** 3. **فروع قصيرة (< يوم).** 4. **Feature flags.** ### الرسم: ``` main ───●───●───●───●───●───●───●─── \ / \ / \ / feature ●─● ●─● ●─● ``` ### مثال عملي: ```bash # كل يوم git checkout main git pull git checkout -b feat/tiny-change # ... عمل صغير git commit -m "feat: تغيير صغير" git push # PR سريع # دمج ``` **المميزات:** - ✅ سريع جداً. - ✅ تعارضات أقل. - ✅ نشر مستمر. **العيوب:** - ❌ يحتاج فريق خبير. - ❌ يحتاج اختبارات قوية. - ❌ يحتاج feature flags. ## مقارنة <table> <thead> <tr> <th>المعيار</th> <th>Git Flow</th> <th>GitHub Flow</th> <th>Trunk</th> </tr> </thead> <tbody> <tr> <td><strong>التعقيد</strong></td> <td>🔴 عالي</td> <td>🟢 منخفض</td> <td>🟢 منخفض</td> </tr> <tr> <td><strong>السرعة</strong></td> <td>🐢 بطيء</td> <td>🚀 سريع</td> <td>⚡ أسرع</td> </tr> <tr> <td><strong>الفروع</strong></td> <td>5 أنواع</td> <td>main + feature</td> <td>main فقط</td> </tr> <tr> <td><strong>المناسب لـ</strong></td> <td>الإصدارات</td> <td>النشر المستمر</td> <td>الفرق السريعة</td> </tr> <tr> <td><strong>الأخطاء</strong></td> <td>قليل</td> <td>متوسط</td> <td>أكثر</td> </tr> </tbody> </table> **التوصية:** - **مبتدئ:** GitHub Flow. - **فريق متوسط:** GitHub Flow. - **فريق كبير:** Git Flow. - **فريق خبير:** Trunk-based. ## أفضل الممارسات ### 1. أسماء الفروع ``` ✅ feature/user-login ✅ fix/header-bug ✅ hotfix/security-patch ✅ release/1.0.0 ❌ my-branch ❌ test123 ❌ work ``` ### 2. رسائل Commits ``` ✅ feat: إضافة تسجيل الدخول ✅ fix: إصلاح خطأ في النموذج ✅ docs: تحديث README ❌ تحديث ❌ fix ❌ asdf ``` ### 3. حجم PR - ✅ **أقل من 400 سطر**. - ✅ **ميزة واحدة**. - ✅ **commit واحد** إذا أمكن. ### 4. المراجعة - **مراجعة واحدة على الأقل**. - **رد خلال 24 ساعة**. - **تعليقات بناءة**. ### 5. الاختبار ```bash # قبل PR npm test npm run lint npm run build ``` ### 6. CI/CD **GitHub Actions:** ```yaml name: CI on: pull_request: branches: [main] jobs: test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: '20' - run: npm install - run: npm test - run: npm run build ``` **النتيجة:** اختبار تلقائي لكل PR. ### 7. حماية الفرع **على GitHub:** `Settings → Branches → Add rule` - ✅ **Require pull request**. - ✅ **Require approvals**. - ✅ **Require status checks**. - ✅ **Require conversation resolution**. **النتيجة:** لا يمكن دفع main مباشرة. ## مثال عملي: فريق صغير ### السيناريو: 3 مطورين **القواعد:** - GitHub Flow. - PR مع مراجعة. - اختبارات CI. - حماية main. **دورة العمل اليومية:** ```bash # 1. ابدأ يومك git checkout main git pull # 2. اعمل على ميزة git checkout -b feature/new-page # ... عمل git add . git commit -m "feat: صفحة جديدة" # 3. ارفع git push -u origin feature/new-page # 4. افتح PR # ... مراجعة # 5. بعد الموافقة # ادمج على GitHub # 6. ابدأ ميزة جديدة git checkout main git pull git checkout -b feature/another ``` ## تمارين عملية ### تمرين 1: GitHub Flow اعمل بـ GitHub Flow. **الحل:** (راجع المثال أعلاه) ### تمرين 2: Git Flow اعمل بـ Git Flow. **الحل:** ```bash git checkout -b develop main git checkout -b feature/x develop # ... عمل git checkout develop git merge feature/x ``` ### تمرين 3: حماية الفرع احمِ `main`. **الحل:** - Settings → Branches. - Add rule → main. - Require PR + approvals. ### تمرين 4: CI أضف GitHub Actions. **الحل:** (راجع `.github/workflows/ci.yml`) ### تمرين 5: أسماء الفروع اكتب 5 أسماء احترافية. **الحل:** ``` feature/user-auth fix/cart-total docs/api-guide refactor/utils hotfix/security ``` ### تمرين 6: رسائل Commits اكتب 5 commits احترافية. **الحل:** ``` feat: إضافة شريط البحث fix: إصلاح خطأ في التحميل docs: تحديث README refactor: تقسيم الملفات test: إضافة اختبارات ``` ### تمرين 7: PR Template أنشئ قالب PR. **الحل:** `.github/pull_request_template.md` ### تمرين 8: مشروع كامل طبّق Workflow كامل. **الحل:** (راجع المثال أعلاه) ## حل المشاكل الشائعة ### 🔴 المشكلة 1: الفريق لا يتبع Workflow **الحل:** - وثّق Workflow في `CONTRIBUTING.md`. - استخدم حماية الفرع. - درّب الفريق. ### 🔴 المشكلة 2: PRs كثيرة ومعلقة **الحل:** - حدد حداً أقصى للـ PRs. - راجع يومياً. - أغلق القديمة. ### 🔴 المشكلة 3: اختبارات تفشل **الحل:** - شغّل الاختبارات محلياً قبل PR. - أضف CI. ### 🔴 المشكلة 4: تعارضات كثيرة **الحل:** - فروع قصيرة. - حدّث من main يومياً. - PRs صغيرة. ### 🔴 المشكلة 5: main غير مستقر **الحل:** - حماية الفرع. - اختبارات إلزامية. - مراجعة قبل الدمج. ## جدول مكونات Workflow <table> <thead> <tr> <th>المكوّن</th> <th>الوصف</th> </tr> </thead> <tbody> <tr> <td><strong>Branching</strong></td> <td>استراتيجية الفروع</td> </tr> <tr> <td><strong>Commits</strong></td> <td>رسائل احترافية</td> </tr> <tr> <td><strong>Pull Requests</strong></td> <td>مراجعة الكود</td> </tr> <tr> <td><strong>Review</strong></td> <td>موافقة قبل الدمج</td> </tr> <tr> <td><strong>CI/CD</strong></td> <td>اختبار ونشر تلقائي</td> </tr> <tr> <td><strong>Protection</strong></td> <td>حماية الفروع</td> </tr> <tr> <td><strong>Releases</strong></td> <td>إصدارات منظمة</td> </tr> </tbody> </table> ## قائمة تحقق نهائية <table> <thead> <tr> <th>المهمة</th> <th>الحالة</th> </tr> </thead> <tbody> <tr> <td>فهم Git Flow</td> <td>⬜</td> </tr> <tr> <td>فهم GitHub Flow</td> <td>⬜</td> </tr> <tr> <td>فهم Trunk-based</td> <td>⬜</td> </tr> <tr> <td>اختيار Workflow مناسب</td> <td>⬜</td> </tr> <tr> <td>إعداد CI/CD</td> <td>⬜</td> </tr> <tr> <td>حماية الفرع</td> <td>⬜</td> </tr> <tr> <td>حل التمارين الثمانية</td> <td>⬜</td> </tr> </tbody> </table> ## ماذا بعد هذا المقال؟ الآن بعد أن أتقنت Workflow، أنت جاهز للمقال الأخير: 1. **مشروع تعاوني** — تطبيق كامل. ## الخلاصة في هذا المقال، تعلمت: - ✅ ما هو Git Workflow. - ✅ Git Flow (التقليدي). - ✅ GitHub Flow (البسيط). - ✅ Trunk-based (السريع). - ✅ أفضل الممارسات. - ✅ CI/CD. - ✅ حماية الفروع. - ✅ حل 8 تمارين عملية. **تذكر:** Workflow جيد = فريق منتج = مشروع ناجح.