Git & GitHub

الفروع في Git — دليل شامل Branches 2026

📅 2026-11-24⏱ 7 دقائق قراءة
في المقال السابق، تعلمت Commits الاحترافية. الآن سنتعلم **الفروع (Branches)** — وهي **الميزة الأقوى** في Git، والتي تسمح بالعمل على ميزات متعددة **في نفس الوقت**. في هذا الدليل العملي، سنأخذك خطوة بخطوة لفهم الفروع، مع تمارين وحلول. ## ما هو الفرع (Branch)؟ **الفرع** هو **خط مستقل** من التطوير. **تشبيه بسيط:** تخيل أنك تكتب كتاباً: - **بدون فروع:** تكتب كل شيء في نفس المسودة (خطر). - **مع الفروع:** كل فصل له **مسودة منفصلة**. تجرّب بحرية، ثم تدمج الجيد. **الفائدة:** - **تجربة بحرية** دون التأثير على الكود الأساسي. - **العمل على ميزات متعددة** بالتوازي. - **العمل الجماعي** دون تعارض. - **الإصلاح السريع** للأخطاء. ## الفرع الرئيسي (main) **`main`** (أو `master` سابقاً) هو **الفرع الافتراضي** والأساسي. **قواعد:** - ✅ **يجب أن يكون نظيفاً** (كود يعمل). - ✅ **يُحدَّث فقط عبر Merge**. - ❌ **لا تعمل مباشرة عليه** (في المشاريع الاحترافية). ## عرض الفروع ```bash git branch ``` **النتيجة:** ``` * main ``` **`*`** تعني أنك على هذا الفرع. **عرض كل الفروع (المحلية والبعيدة):** ```bash git branch -a ``` ## إنشاء فرع جديد ### 1. إنشاء فرع (بدون التبديل) ```bash git branch feature-login ``` ### 2. إنشاء + التبديل ```bash git checkout -b feature-login ``` **أو (الحديث):** ```bash git switch -c feature-login ``` **النتيجة:** ``` Switched to a new branch 'feature-login' ``` ## التبديل بين الفروع ### 1. الطريقة الكلاسيكية ```bash git checkout main git checkout feature-login ``` ### 2. الطريقة الحديثة ```bash git switch main git switch feature-login ``` **الفرق:** `git switch` مخصص للفروع فقط. ## حذف فرع ### 1. حذف فرع (تم دمجه) ```bash git branch -d feature-login ``` ### 2. حذف فرع (بالقوة) ```bash git branch -D feature-login ``` **⚠️ تحذير:** `-D` يحذف حتى لو لم يُدمج. ### 3. حذف فرع بعيد ```bash git push origin --delete feature-login ``` ## إعادة تسمية فرع ### 1. إعادة تسمية الفرع الحالي ```bash git branch -m new-name ``` ### 2. إعادة تسمية فرع آخر ```bash git branch -m old-name new-name ``` ## مثال عملي: ميزة جديدة ### السيناريو: إضافة صفحة تسجيل دخول **الخطوة 1: ابدأ من `main`** ```bash git checkout main git pull ``` **الخطوة 2: أنشئ فرعاً للميزة** ```bash git checkout -b feature/login ``` **الخطوة 3: اعمل على الميزة** ```bash echo "<form>تسجيل الدخول</form>" > login.html git add . git commit -m "feat: إضافة صفحة تسجيل الدخول" ``` **الخطوة 4: عدّل مرة أخرى** ```bash echo "<style>form { padding: 20px; }</style>" >> login.html git add . git commit -m "style: تنسيق صفحة تسجيل الدخول" ``` **الخطوة 5: ارفع الفرع** ```bash git push -u origin feature/login ``` **الخطوة 6: ارجع لـ main** ```bash git checkout main ``` **النتيجة:** `main` **لم يتأثر** بالتغييرات! **🎉 الفرع يعمل!** ## دورة حياة الفرع <table> <thead> <tr> <th>المرحلة</th> <th>الأمر</th> </tr> </thead> <tbody> <tr> <td><strong>1. إنشاء</strong></td> <td><code>git checkout -b feature</code></td> </tr> <tr> <td><strong>2. العمل</strong></td> <td><code>git add . && git commit</code></td> </tr> <tr> <td><strong>3. الرفع</strong></td> <td><code>git push -u origin feature</code></td> </tr> <tr> <td><strong>4. Pull Request</strong></td> <td>على GitHub</td> </tr> <tr> <td><strong>5. المراجعة</strong></td> <td>Team review</td> </tr> <tr> <td><strong>6. الدمج</strong></td> <td><code>git merge</code></td> </tr> <tr> <td><strong>7. الحذف</strong></td> <td><code>git branch -d feature</code></td> </tr> </tbody> </table> ## استراتيجيات التسمية **أسماء الفروع الاحترافية:** <table> <thead> <tr> <th>النوع</th> <th>الصيغة</th> <th>مثال</th> </tr> </thead> <tbody> <tr> <td><strong>ميزة</strong></td> <td><code>feature/اسم</code></td> <td><code>feature/login</code></td> </tr> <tr> <td><strong>إصلاح</strong></td> <td><code>fix/اسم</code></td> <td><code>fix/login-error</code></td> </tr> <tr> <td><strong>تحسين</strong></td> <td><code>refactor/اسم</code></td> <td><code>refactor/utils</code></td> </tr> <tr> <td><strong>وثائق</strong></td> <td><code>docs/اسم</code></td> <td><code>docs/api</code></td> </tr> <tr> <td><strong>اختبار</strong></td> <td><code>test/اسم</code></td> <td><code>test/auth</code></td> </tr> <tr> <td><strong>مهمة</strong></td> <td><code>chore/اسم</code></td> <td><code>chore/deps</code></td> </tr> </tbody> </table> ## الفروع البعيدة ### 1. عرض الفروع البعيدة ```bash git branch -r ``` ### 2. جلب فروع جديدة ```bash git fetch ``` ### 3. سحب فرع بعيد ```bash git checkout -b feature origin/feature ``` **أو الحديث:** ```bash git switch -c feature origin/feature ``` ### 4. ربط الفرع المحلي بالبعيد ```bash git push -u origin feature/login ``` **`-u`** = `--set-upstream` (يربط مرة واحدة). بعد ذلك: ```bash git push # يعرف مكانه git pull # يعرف مكانه ``` ## أفضل الممارسات ### 1. فرع واحد لكل ميزة ```bash ✅ feature/login ✅ fix/header-bug ✅ docs/readme ❌ my-changes ❌ test123 ❌ fix-all ``` ### 2. حدّث من main بانتظام ```bash git checkout main git pull git checkout feature/login git merge main # أو git rebase main ``` ### 3. احذف الفروع المدمجة ```bash git branch -d feature/login ``` ### 4. فرع قصير الأجل **⚠️:** الفرع الذي يعيش أسابيع = تعارضات صعبة. ### 5. لا ترفع main مباشرة ```bash ❌ git checkout main ❌ git commit -m "..." # خطأ في المشاريع الجماعية ✅ git checkout -b feature ✅ git commit ✅ git push ✅ Pull Request ``` ## تمارين عملية ### تمرين 1: إنشاء فرع أنشئ فرعاً باسم `feature-about`. **الحل:** ```bash git checkout -b feature-about ``` ### تمرين 2: عرض الفروع اعرض كل الفروع. **الحل:** ```bash git branch -a ``` ### تمرين 3: العمل على فرع أنشئ ملفاً في الفرع. **الحل:** ```bash echo "من نحن" > about.html git add . git commit -m "feat: إضافة صفحة من نحن" ``` ### تمرين 4: التبديل انتقل إلى `main` ثم عد للفرع. **الحل:** ```bash git checkout main git checkout feature-about ``` ### تمرين 5: حذف فرع احذف `feature-about`. **الحل:** ```bash git checkout main git branch -d feature-about ``` ### تمرين 6: إعادة تسمية أعد تسمية فرع. **الحل:** ```bash git branch -m old-name new-name ``` ### تمرين 7: رفع فرع ارفع فرعاً إلى GitHub. **الحل:** ```bash git push -u origin feature/login ``` ### تمرين 8: مشروع كامل أنشئ 3 فروع، اعمل عليها، وارفعها. **الحل:** ```bash # فرع 1 git checkout -b feature/login git commit -m "feat: login" git push -u origin feature/login # فرع 2 git checkout main git checkout -b feature/register git commit -m "feat: register" git push -u origin feature/register # فرع 3 git checkout main git checkout -b fix/header git commit -m "fix: header" git push -u origin fix/header ``` ## حل المشاكل الشائعة ### 🔴 المشكلة 1: `cannot switch branch: uncommitted changes` **السبب:** لديك تغييرات غير محفوظة. **الحل:** ```bash git stash # احفظ التغييرات git checkout main # انتقل git stash pop # ارجع للتغييرات ``` ### 🔴 المشكلة 2: الفرع لا يُرفع **الحل:** ```bash git push -u origin feature-name ``` ### 🔴 المشكلة 3: `branch already exists` **الحل:** ```bash git branch -d feature-name git checkout -b feature-name ``` ### 🔴 المشكلة 4: نسيت على أي فرع أنت **الحل:** ```bash git status ``` **النتيجة:** `On branch feature/login` ### 🔴 المشكلة 5: `error: pathspec 'xyz' did not match` **السبب:** الفرع غير موجود. **الحل:** ```bash git branch -a # تأكد من الاسم ``` ## جدول أوامر الفروع <table> <thead> <tr> <th>الأمر</th> <th>الوظيفة</th> </tr> </thead> <tbody> <tr> <td><code>git branch</code></td> <td>عرض الفروع</td> </tr> <tr> <td><code>git branch -a</code></td> <td>عرض كل الفروع</td> </tr> <tr> <td><code>git checkout -b name</code></td> <td>إنشاء + تبديل</td> </tr> <tr> <td><code>git switch -c name</code></td> <td>الحديث</td> </tr> <tr> <td><code>git checkout name</code></td> <td>تبديل</td> </tr> <tr> <td><code>git branch -d name</code></td> <td>حذف (آمن)</td> </tr> <tr> <td><code>git branch -D name</code></td> <td>حذف (قوي)</td> </tr> <tr> <td><code>git branch -m new</code></td> <td>إعادة تسمية</td> </tr> <tr> <td><code>git push -u origin name</code></td> <td>رفع الفرع</td> </tr> </tbody> </table> ## قائمة تحقق نهائية <table> <thead> <tr> <th>المهمة</th> <th>الحالة</th> </tr> </thead> <tbody> <tr> <td>فهم الفروع</td> <td>⬜</td> </tr> <tr> <td>إنشاء فرع</td> <td>⬜</td> </tr> <tr> <td>التبديل بين الفروع</td> <td>⬜</td> </tr> <tr> <td>العمل على فرع</td> <td>⬜</td> </tr> <tr> <td>رفع فرع إلى GitHub</td> <td>⬜</td> </tr> <tr> <td>حذف الفروع</td> <td>⬜</td> </tr> <tr> <td>حل التمارين الثمانية</td> <td>⬜</td> </tr> </tbody> </table> ## ماذا بعد هذا المقال؟ الآن بعد أن أتقنت الفروع، أنت جاهز للمقال التالي: 1. **الدمج (Merge)** — دمج الفروع. 2. **حل التعارضات** — Conflict Resolution. 3. **Pull Requests** — العمل الجماعي. ## الخلاصة في هذا المقال، تعلمت: - ✅ ما هي الفروع. - ✅ إنشاء وتبديل الفروع. - ✅ دورة حياة الفرع. - ✅ الفروع البعيدة. - ✅ أفضل الممارسات. - ✅ حل 8 تمارين عملية. **تذكر:** الفروع هي **الميزة الأقوى** في Git. أتقنها.