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. أتقنها.