في هذا الدرس 6تصفّح المواضيع
في أنظمة إدارة الإصدارات القديمة، كان إنشاء فرع جديد يتطلب نسخ جميع ملفات المشروع في مجلد منفصل على القرص الصلب، وهو ما يستغرق وقتاً طويلاً في المشاريع الكبيرة. أما في Git، فالفرع (Branch) ليس سوى مؤشر خفيف الوزن قابل للحركة (Lightweight Movable Pointer) يشير إلى أحد الالتزامات؛ وداخلياً يُخزن كملف نصي بحجم 41 بايت فقط داخل المسار .git/refs/heads/ يحتوي على بصمة SHA-1 المكونة من 40 محرفاً متبوعة بسطر جديد.
بفضل هذه المعمارية الفريدة، يتم إنشاء أي فرع في أجزاء من الألف من الثانية مهما بلغ حجم المستودع، وعندما تسجل التزاماً جديداً يتحرك مؤشر الفرع النشط تلقائياً خطوة للأمام ليشير إلى اللقطة الأحدث.
# Inspect the raw branch pointer file inside .git
cat .git/refs/heads/main
# Compare the pointer hash with the latest commit
git log -n 1 --oneline
عندما يحتوي المستودع على عدة فروع، كيف يعرف نظام Git أي فرع تعمل عليه الآن؟ يحتفظ النظام بمؤشر رمزي خاص يُسمى HEAD يُخزن داخل الملف .git/HEAD:
- الإشارة الرمزية غير المباشرة: في الحالة الطبيعية، يشير
HEADإلى اسم الفرع النشط مثلref: refs/heads/main، بينما يشير ملف الفرع بدوره إلى بصمة الالتزام الحالي. - التحقق البصري في السجل: عند تشغيل الأمر
git log --oneline --decorateتظهر العبارة(HEAD -> main)بجوار الالتزام لبيان الفرع النشط وموقع المؤشر.
# Read the symbolic reference stored in .git/HEAD
cat .git/HEAD
# View commit history with branch and HEAD labels
git log --oneline --decorate -n 3
يمثل الأمر git branch الأداة الأساسية لاستعراض الفروع المحلية وإنشاء فروع جديدة لعزل الميزات البرمجية:
- استعراض الفروع (
git branch): عند تشغيله بدون معاملات، يطبع قائمة بجميع الفروع المحلية مرتبة أبجدياً ويميز الفرع النشط بعلامة النجمة*. - العرض التفصيلي (
git branch -v): يظهر بجوار كل فرع البصمة المختصرة ورسالة آخر التزام وصل إليه. - إنشاء فرع جديد (
git branch <name>): ينشئ مؤشر فرع جديد عند الالتزام الحالي دون الانتقال إليه، حيث يظل مؤشرHEADعلى فرعك الحالي.
# Create a new branch pointer at the current commit
git branch feature-auth
# List all local branches with latest commit info
git branch -v
يوفر الأمر git branch خيارات دقيقة لإعادة تسمية الفروع أو حذفها بعد انتهاء الغرض منها:
- إعادة تسمية الفرع (
git branch -m): يُستخدم لتغيير اسم فرع محدد عبر تمرير الاسم القديم ثم الجديد، أو لتوحيد اسم الفرع النشط الحالي عبرgit branch -M main. - الحذف الآمن (
git branch -d): يحذف مؤشر الفرع بشرط أن تكون التزاماته مدمجة بالفعل، ويرفض التنفيذ إذا كان الفرع يحتوي على عمل غير مدمج. - الحذف الإجباري (
git branch -D): يحذف الفرع التجريبي فوراً حتى لو لم تُدمج التزاماته عندما تقرر إلغاء التجربة عمداً.
# Rename a local branch pointer cleanly
git branch -m feature-auth feat-login
# Safely delete a branch pointer with -d
git branch -d feat-login
تلتزم فرق هندسة البرمجيات بمعايير واضحة لتسمية الفروع تتوافق مع قواعد الفحص القياسية في Git:
- البادئات التنظيمية القياسية: يُفضل استخدام الأحرف الإنجليزية الصغيرة والشرطات مع بادئة توضح غرض الفرع مثل
feat/user-profileللميزات الجديدة، وfix/cart-totalلإصلاح الأخطاء، وdocs/readmeللتوثيق. - الرموز الممنوعة في الأسماء: يمنع Git احتواء اسم الفرع على مسافات فارغة، أو نقطتين متتاليتين
..، أو الرموز~و^و:و*، أو انتهاء الاسم بالامتداد المحجوز.lock.
# Create branches following team prefix standards
git branch feat/search-bar
git branch fix/header-overlap
git branch --list "feat/*"
يلخص الجدول المرجعي التالي أهم صيغ وخيارات الأمر git branch لإدارة الفروع المحلية بكفاءة وأمان:
| الأمر أو الخيار | الوظيفة الأساسية | السلوك ومستوى الأمان |
|---|---|---|
git branch | عرض جميع الفروع المحلية | يميز الفرع النشط بعلامة النجمة * |
git branch -v | عرض الفروع مع آخر التزام | يعرض البصمة المختصرة وعنوان الالتزام |
git branch <name> | إنشاء مؤشر فرع جديد | ينشئ المؤشر دون تغيير الفرع النشط |
git branch -m <old> <new> | إعادة تسمية فرع محلي | يعدل اسم المؤشر بأمان دون استبدال فرع موجود |
git branch -d <name> | حذف فرع مدمج بأمان | يرفض الحذف إذا تضمن الفرع التزامات غير مدمجة |
git branch -D <name> | حذف فرع إجبارياً | يحذف المؤشر فوراً حتى لو لم يُدمج |
ملخص الدرس
حصاد الدرسمراجعة مركّزة لأهم المفاهيم والقواعد الهندسية التي أتقنتها في هذا الدرس قبل التطبيق العملي
ماذا تعلّمت في هذا الدرس؟
تعرفت في هذا الدرس على طبيعة الفروع في Git بوصفها مؤشرات خفيفة الوزن بحجم 41 بايت، وكيفية تتبع الفرع النشط عبر المؤشر الرمزي HEAD، وأتقنت عرض الفروع وإنشاءها وتسميتها وحذفها بأمان عبر الأمر git branch. الخطوة التالية: انتقل الآن إلى الدرس رقم 21 «التنقل بين الفروع عبر git switch وgit checkout» لتعلّم الانتقال بين الفروع وعلاج حالة المؤشر المنفصل.
سجّل الدخول لحفظ تقدمك
تابع إنجاز المواضيع والمصطلحات والمهام، وكمّل من آخر خطوة على أي جهاز.
المصطلحات4
راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.
- 01 Branch Pointer مؤشر الفرع
- ملف مرجعي خفيف الوزن بحجم 41 بايت داخل .git/refs/heads/ يحفظ بصمة SHA-1 للالتزام الذي يقف عنده الفرع.
- للمراجعة
- 02 Symbolic Reference المرجع الرمزي
- مؤشر مثل HEAD يشير إلى مسار فرع آخر بدلاً من الإشارة المباشرة إلى بصمة التزام خام.
- للمراجعة
- 03 Active Branch الفرع النشط
- الفرع الذي يشير إليه مؤشر HEAD حالياً ويظهر مسبوقاً بعلامة النجمة (*) في مخرجات git branch.
- للمراجعة
- 04 Unmerged Branch الفرع غير المدمج
- فرع يحتوي على التزامات لم تُضم بعد إلى الفرع الحالي، ويحميه الخيار git branch -d من الحذف بالخطأ.
- للمراجعة
لا توجد بطاقات تطابق البحث والتصفية.
اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.
الاختصارات4
راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.
- 01 HEAD HEAD
- Current Active Branch Reference
- المؤشر المرجعي الخاص في Git الذي يحدد الفرع النشط واللقطة الحالية لمجلد العمل.
- للمراجعة
- 02 SHA-1 SHA-1
- Secure Hash Algorithm 1
- البصمة الرقمية الست عشرية المكونة من 40 محرفاً والمحفوظة داخل ملف كل فرع.
- للمراجعة
- 03 DAG DAG
- Directed Acyclic Graph
- هيكل الرسم البياني للالتزامات الذي تتحرك فوق عقده مؤشرات الفروع.
- للمراجعة
- 04 CLI CLI
- Command Line Interface
- واجهة سطر الأوامر المستخدمة لتنفيذ أوامر إدارة الفروع وفحصها.
- للمراجعة
لا توجد بطاقات تطابق البحث والتصفية.
اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.
مهامك قبل الاختبار
خطوة صغيرة كل مرة. وإنجاز تقدر ترجع له.
-
نفّذ الأمر git branch feat/navbar داخل مستودعك المحلي، ثم شغّل git branch -v وcat .git/HEAD للتأكد من بقاء المؤشر على main.
-
أعد تسمية الفرع feat/navbar إلى feat/top-nav عبر الخيار -m، وتحقق من القائمة ثم احذفه بأمان عبر الخيار -d.
تأشير المهمة إقرار منك بإتمامها، وليس تصحيحًا آليًا للكود. يُحفظ تقدمك في حسابك.
اختبر فهمك.
ووصلها للإتقان.
كل سؤال خطوة لقدّام. اختار، اكتب كود، وشوف نتيجتك فورًا.
أكمل المهام، واجمع كل الإجابات الصحيحة. أقل من 100%؟ راجع وأعد المحاولة.
الأسئلة متاحة للاطلاع. سجّل الدخول للتفاعل وحفظ تقدمك.
لمحة عن التحدي10 أسئلة تنتظرك +
ما حقيقة الفرع (Branch) داخلياً في معمارية نظام Git؟
الفرع في Git هو مؤشر خفيف الوزن يُحفظ كملف نصي بحجم 41 بايت يضم بصمة SHA-1 للالتزام.
يؤدي تشغيل الأمر git branch feature-login إلى إنشاء الفرع والانتقال إليه تلقائياً في نفس اللحظة.
خطأ؛ فالأمر git branch ينشئ المؤشر فقط بينما يبقى مؤشر HEAD على الفرع الحالي دون انتقال.
أين يخزن نظام Git ملفات مؤشرات الفروع المحلية افتراضياً؟
تُحفظ ملفات مؤشرات الفروع المحلية داخل المجلد .git/refs/heads/.
إلى ماذا ترمز علامة النجمة (*) في مخرجات الأمر git branch؟
تشير علامة النجمة (*) إلى الفرع النشط حالياً الذي يشير إليه مؤشر HEAD.
أي خيار يحذف الفرع المحلي بأمان فقط إذا كانت التزاماته مدمجة مسبقاً؟
يتحقق الخيار الصغير -d من حالة الدمج ويمنع حذف أي فرع يحتوي على التزامات غير مدمجة.
ما الأمر الصحيح لإعادة تسمية فرع محلي من old-ui إلى modern-ui؟
يُستخدم الأمر git branch -m old-ui modern-ui لإعادة تسمية مؤشر الفرع المحلي.
كيف يتتبع مؤشر HEAD الفرع النشط في الوضع الطبيعي داخل الملف .git/HEAD؟
يخزن مرجعاً رمزياً يشير إلى مسار الفرع النشط مثل ref: refs/heads/main.
يسمح نظام Git باحتواء أسماء الفروع على مسافات فارغة أو انتهائها بالامتداد .lock.
خطأ؛ يمنع نظام Git وجود مسافات أو انتهاء اسم الفرع بـ .lock.
أي خيار في الأمر git branch يعرض البصمة المختصرة ورسالة آخر التزام بجوار كل فرع؟
يفعّل الخيار -v العرض التفصيلي الذي يطبع بصمة وعنوان آخر التزام لكل فرع.
أي اسم من الأسماء التالية يُعد اسماً صحيحاً ومطابقاً للمعايير الاحترافية في Git؟
يتبع الاسم feat/user-authentication معيار البادئات والأحرف الصغيرة والشرطات القياسية.