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

5 دقيقة

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


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

الفرع خط تطوير مستقل. يسمح لك بالعمل على ميزة جديدة دون المساس بالإصدار الرئيسي (main)، الذي يبقى مستقراً.

تشبيه: مستند مشترك. بدل تحرير النسخة الرسمية مباشرة (خطر كسر الكل)، تعمل على نسخة عمل (الفرع). عندما ترضى، تدمج تغييراتك في الأصل.

لماذا هو أساسي:

  • العزل: عمل تجريبي لا يكسر الإصدار المستقر أبداً.
  • التعاون: كل شخص يعمل على فرعه، دون إعاقة الآخرين.
  • التنظيم: فرع = ميزة أو تصحيح.
فرع نموذجيالدور
mainإصدار مستقر، جاهز للتسليم
feature/...ميزة جديدة قيد العمل
fix/...تصحيح خطأ

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


2 — إنشاء فرع والتبديل إليه
bash
# سرد الفروع (الحالي معلَّم بـ *)
git branch

# إنشاء فرع
git branch feature-connexion

# التبديل إلى فرع
git switch feature-connexion

# الإنشاء والتبديل في أمر واحد (موصى به)
git switch -c feature-connexion
الأمر الحديثالمكافئ القديمالأثر
git switch nomgit checkout nomالتبديل إلى فرع
git switch -c nomgit checkout -b nomالإنشاء والتبديل
git branchسرد الفروع
git branch -d nomحذف فرع مدموج

git switch الأمر الحديث المخصَّص للفروع. git checkout ما زال يعمل لكنه يفعل أشياء كثيرة دفعة واحدة — فضّل switch للفروع.

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

عرض الحل
bash
git switch -c feature-login

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


3 — دمج فرع

الدمج (merge) هو إدماج تغييرات فرع في فرع آخر — عادة إعادة ميزتك المنتهية إلى main.

bash
# 1. الانتقال إلى الفرع الذي سيستقبل التغييرات
git switch main

# 2. دمج فرع الميزة فيه
git merge feature-connexion
نوع الدمجمتى؟النتيجة
Fast-forwardmain لم يتحرك منذ الفرعmain يتقدم ببساطة
Merge commitmain تطوّر أيضاًإيداع دمج يجمع القصتين
bash
# بعد دمج ناجح، يمكن حذف الفرع
git branch -d feature-connexion

قاعدة بسيطة: نقف على فرع الوجهة (main)، ثم ندمج الفرع المصدر فيه. «أنا على main، أستوعب feature».

تمرين مصغّر — أنت على feature-login والعمل منتهٍ. اكتب الأمرين لدمج هذا الفرع في main.

عرض الحل
bash
git switch main
git merge feature-login

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


4 — إدارة تعارض دمج

يحدث تعارض عندما يعدّل فرعان السطر نفسه في الملف نفسه. Git لا يستطيع الاختيار عنك: يطلب منك الحسم.

يدرج Git علامات في الملف المتعارض:

<<<<<<< HEAD
نص الفرع الحالي (main)
=======
نص الفرع المدموج (feature)
>>>>>>> feature-connexion

للحل:

  1. افتح الملف، اختر المحتوى الصحيح (أو اجمع الاثنين).
  2. احذف العلامات <<<<<<< و ======= و >>>>>>>.
  3. git add fichier ثم git commit لإنهاء الدمج.

التعارض ليس خطأ جسيماً: Git يحميك برفض التخمين. ابق هادئاً، اقرأ النسختين، أبقِ الصحيحة.

تمرين مصغّر — اذكر العلامات الثلاث التي يدرجها Git في ملف متعارض ويجب حذفها بعد الحل.

عرض الحل

<<<<<<< و ======= و >>>>>>>. بعد اختيار المحتوى الصحيح تُحذف، ثم git add و git commit.

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


5 — استشارة السجل
bash
# السجل الكامل
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 آلة زمن. مستخدَماً جيداً (برسائل إيداع جيدة)، يسمح بفهم لماذا الشفرة في حالتها الحالية.

تمرين مصغّر — اكتب الأمر الذي يعرض السجل بشكل مختصر، مع رسم الفروع وكل الفروع.

عرض الحل
bash
git log --oneline --graph --all

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


6 — اختبار — الفروع والسجل

السؤال 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 يجعله مختصراً.

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


7 — تطبيق عملي — ميزة على فرعها

المطلوب

على مستودع موجود، أنشئ فرعاً، أودع فيه، ثم ادمجه في main واستشر الرسم.


التصحيح — سلسلة الأوامر المتوقعة

bash
# 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.

هذه الدورة — إنشاء فرع، عمل، دمج، حذف — سير العمل اليومي للمطوّر. ستكررها مئات المرات.

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


8 — الخلاصة

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

  1. فرع = خط تطوير معزول؛ main يبقى مستقراً.
  2. git switch -c nom ينشئ فرعاً وينتقل إليه.
  3. الدمج: الوقوف على الوجهة (main)، ثم git merge source.
  4. التعارض يحدث على الأسطر نفسها المعدَّلة من الطرفين؛ يُحَل يدوياً.
  5. git log --oneline --graph --all يصوّر القصة والفروع.

ما يلي

الدرس 08 — المستودع البعيد: مشاركة عملك على الخط والتعاون عبر خادم Git (GitHub).

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


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

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