| # | القسم |
|---|---|
| 1 | لماذا الفروع؟ |
| 2 | إنشاء فرع والتبديل إليه |
| 3 | دمج فرع |
| 4 | إدارة تعارض دمج |
| 5 | استشارة السجل |
| 6 | اختبار — الفروع والسجل |
| 7 | تطبيق عملي — ميزة على فرعها |
| 8 | الخلاصة |
الفرع خط تطوير مستقل. يسمح لك بالعمل على ميزة جديدة دون المساس بالإصدار الرئيسي (main)، الذي يبقى مستقراً.
تشبيه: مستند مشترك. بدل تحرير النسخة الرسمية مباشرة (خطر كسر الكل)، تعمل على نسخة عمل (الفرع). عندما ترضى، تدمج تغييراتك في الأصل.
لماذا هو أساسي:
| فرع نموذجي | الدور |
|---|---|
main | إصدار مستقر، جاهز للتسليم |
feature/... | ميزة جديدة قيد العمل |
fix/... | تصحيح خطأ |
# سرد الفروع (الحالي معلَّم بـ *)
git branch
# إنشاء فرع
git branch feature-connexion
# التبديل إلى فرع
git switch feature-connexion
# الإنشاء والتبديل في أمر واحد (موصى به)
git switch -c feature-connexion| الأمر الحديث | المكافئ القديم | الأثر |
|---|---|---|
git switch nom | git checkout nom | التبديل إلى فرع |
git switch -c nom | git checkout -b nom | الإنشاء والتبديل |
git branch | — | سرد الفروع |
git branch -d nom | — | حذف فرع مدموج |
git switchالأمر الحديث المخصَّص للفروع.git checkoutما زال يعمل لكنه يفعل أشياء كثيرة دفعة واحدة — فضّلswitchللفروع.
تمرين مصغّر — اكتب الأمر الذي ينشئ الفرع feature-login وينتقل إليه في عملية واحدة.
git switch -c feature-loginالدمج (merge) هو إدماج تغييرات فرع في فرع آخر — عادة إعادة ميزتك المنتهية إلى main.
# 1. الانتقال إلى الفرع الذي سيستقبل التغييرات
git switch main
# 2. دمج فرع الميزة فيه
git merge feature-connexion| نوع الدمج | متى؟ | النتيجة |
|---|---|---|
| Fast-forward | main لم يتحرك منذ الفرع | main يتقدم ببساطة |
| Merge commit | main تطوّر أيضاً | إيداع دمج يجمع القصتين |
# بعد دمج ناجح، يمكن حذف الفرع
git branch -d feature-connexionقاعدة بسيطة: نقف على فرع الوجهة (
main)، ثم ندمج الفرع المصدر فيه. «أنا على main، أستوعب feature».
تمرين مصغّر — أنت على feature-login والعمل منتهٍ. اكتب الأمرين لدمج هذا الفرع في main.
git switch main
git merge feature-loginيحدث تعارض عندما يعدّل فرعان السطر نفسه في الملف نفسه. Git لا يستطيع الاختيار عنك: يطلب منك الحسم.
يدرج Git علامات في الملف المتعارض:
<<<<<<< HEAD
نص الفرع الحالي (main)
=======
نص الفرع المدموج (feature)
>>>>>>> feature-connexionللحل:
<<<<<<< و ======= و >>>>>>>.git add fichier ثم git commit لإنهاء الدمج.التعارض ليس خطأ جسيماً: Git يحميك برفض التخمين. ابق هادئاً، اقرأ النسختين، أبقِ الصحيحة.
تمرين مصغّر — اذكر العلامات الثلاث التي يدرجها Git في ملف متعارض ويجب حذفها بعد الحل.
<<<<<<< و ======= و >>>>>>>. بعد اختيار المحتوى الصحيح تُحذف، ثم git add و git commit.
# السجل الكامل
git log
# نسخة مختصرة (سطر لكل إيداع)
git log --oneline
# مع رسم الفروع والدمج
git log --oneline --graph --all
# رؤية تعديلات إيداع
git show <hash>
# رؤية من عدّل كل سطر في ملف
git blame fichier.txt| الأمر | يجيب عن السؤال |
|---|---|
git log | ما قصة المشروع؟ |
git log --oneline --graph --all | كيف تفرّعت الفروع؟ |
git show <hash> | ماذا غيّر هذا الإيداع بالضبط؟ |
git blame fichier | من كتب هذا السطر، ومتى؟ |
سجل Git آلة زمن. مستخدَماً جيداً (برسائل إيداع جيدة)، يسمح بفهم لماذا الشفرة في حالتها الحالية.
تمرين مصغّر — اكتب الأمر الذي يعرض السجل بشكل مختصر، مع رسم الفروع وكل الفروع.
git log --oneline --graph --allالسؤال 1: لماذا يُستخدم الفرع؟
a) لحذف السجل
b) للتطوير بمعزل دون المساس بالإصدار الرئيسي
c) للاتصال بـ GitHub
d) لتجميع الشفرة
الإجابة: b) — الفرع خط تطوير مستقل: يعزل العمل الجاري عن الفرع المستقر main.
السؤال 2: أي أمر ينشئ فرعاً وينتقل إليه؟
a) git branch nom
b) git switch -c nom
c) git merge nom
d) git log nom
الإجابة: b) — git switch -c nom ينشئ الفرع ويقف عليه في أمر واحد (المكافئ الحديث لـ git checkout -b).
السؤال 3: لدمج feature في main، يجب أولاً…
a) الوقوف على feature ثم git merge main
b) الوقوف على main ثم git merge feature
c) حذف main
d) تنفيذ git init
الإجابة: b) — نقف على فرع الوجهة (main)، ثم ندمج الفرع المصدر (feature) فيه.
السؤال 4: متى يحدث تعارض دمج؟
a) عندما يعدّل فرعان السطر نفسه في الملف نفسه
b) عند كل دمج، دائماً
c) عند إنشاء فرع
d) عند تثبيت Git
الإجابة: a) — Git لا يستطيع الاختيار بين تعديلين للسطر نفسه: يشير إلى تعارض يُحَل يدوياً.
السؤال 5: أي أمر يعرض السجل مع رسم الفروع؟
a) git status
b) git log --oneline --graph --all
c) git branch -d
d) git add .
الإجابة: b) — --graph --all يرسم بنية الفروع والدمج؛ --oneline يجعله مختصراً.
على مستودع موجود، أنشئ فرعاً، أودع فيه، ثم ادمجه في main واستشر الرسم.
# 1. الانطلاق من main محدَّث
git switch main
# 2. إنشاء فرع ميزة والانتقال إليه
git switch -c feature-titre
# 3. العمل والإيداع على الفرع
echo "## قسم جديد" >> README.md
git add README.md
git commit -m "يضيف قسماً جديداً إلى README"
# 4. العودة إلى main والدمج
git switch main
git merge feature-titre
# 5. تنظيف الفرع المدموج
git branch -d feature-titre
# 6. تصوير السجل
git log --oneline --graph --allالنتيجة المتوقعة: يظهر إيداع الفرع في سجل main، و git branch لم يعد يسرد feature-titre.
هذه الدورة — إنشاء فرع، عمل، دمج، حذف — سير العمل اليومي للمطوّر. ستكررها مئات المرات.
main يبقى مستقراً.git switch -c nom ينشئ فرعاً وينتقل إليه.main)، ثم git merge source.git log --oneline --graph --all يصوّر القصة والفروع.الدرس 08 — المستودع البعيد: مشاركة عملك على الخط والتعاون عبر خادم Git (GitHub).
جميع الحقوق محفوظة. يُحظَر نسخ هذه الدورة أو نشرها أو استخدامها أو تكييفها، كلياً أو جزئياً، دون إذن كتابي مسبق من الدكتور هيثم رحومة.
دورة من إعداد الدكتور هيثم رحومة — تطوير ونشر حلول البيانات