في هذا الدرس 6تصفّح المواضيع
قُدّم الأمر الحديث git switch في الإصدار 2.23 من Git ليكون أداة متخصصة وواضحة تقتصر وظيفتها على التنقل بين الفروع فقط. عند تنفيذ git switch <branch-name> يُجري النظام ثلاث خطوات متزامنة:
- تحديث المؤشر
HEAD: يوجّه الملف.git/HEADليشير إلى الفرع الهدف. - تحديث منطقة التجهيز: يطابق فهرس التجهيز مع لقطة الفرع المنتقل إليه.
- تحديث مجلد العمل: يحدّث الملفات المتتبعة في مجلد مشروعك لتطابق محتويات الفرع الجديد.
كما يمكنك التبديل السريع للعودة إلى الفرع السابق مباشرة باستخدام اختصار الشرطة git switch -.
# Switch to an existing branch
git switch feature-auth
# Toggle back to the previously active branch
git switch -
في سير العمل اليومي، غالباً ما نرغب في إنشاء فرع جديد والانتقال للعمل داخله فوراً. بدلاً من كتابة أمرين منفصلين، يوفر الأمر git switch الخيار -c (اختصار --create):
- الإنشاء والانتقال معاً (
git switch -c <new-branch>): ينشئ مؤشر الفرع الجديد عند الالتزام الحالي وينقل مؤشرHEADإليه في خطوة واحدة. - التفرع من التزام سابق: يمكنك تمرير مرجع التزام سابق كمعامل إضافي مثل
git switch -c fix-layout HEAD~2لإنشاء الفرع بدءاً من لقطة تاريخية محددة.
# Create a new branch and switch to it immediately
git switch -c feat/payment-form
# Verify active branch with git status
git status -s -b
نظراً لأن ملايين السكربتات التلقائية والمراجع الهندسية تستخدم الأمر الكلاسيكي git checkout، يجب على كل مطور محترف إتقان الصيغتين معاً:
- الانتقال إلى فرع موجود: الصيغة التقليدية
git checkout <branch>تكافئ تماماً الأمر الحديثgit switch <branch>. - الإنشاء والانتقال بخطوة واحدة: الصيغة التقليدية
git checkout -b <new-branch>تكافئ الأمر الحديثgit switch -c <new-branch>.
# Classic command to switch to an existing branch
git checkout main
# Classic command to create and switch (-b)
git checkout -b feat/dark-theme
في الوضع الطبيعي يشير HEAD إلى اسم فرع، ويشير الفرع إلى الالتزام. أما إذا انتقلت مباشرة إلى بصمة التزام معين عبر git checkout a1b2c3d أو git switch --detach HEAD~1، يدخل المستودع في حالة المؤشر المنفصل (Detached HEAD)، حيث يحفظ الملف .git/HEAD بصمة الالتزام مباشرة دون فرع وسيط.
تُعد معاينة الكود القديم في هذه الحالة آمنة تماماً، لكن الخطر يقع إذا أنشأت التزامات جديدة وأنت في وضع الانفصال ثم عدت إلى main؛ إذ تصبح تلك الالتزامات يتيمة بلا فرع يشير إليها. ولحفظها بأمان، أنشئ فرعاً فورياً في موقعك عبر git switch -c <new-branch>.
# Inspect an older commit in detached HEAD mode
git switch --detach HEAD~1
# Rescue detached work by attaching a new branch
git switch -c rescue-old-state
ماذا يحدث إذا عدّلت ملفاً في مجلد العمل ثم حاولت الانتقال إلى فرع آخر قبل حفظ التزام؟
- انتقال التعديلات غير المتضاربة: إذا كان الملف المعدل متطابقاً بين الفرع الحالي والفرع الهدف، يسمح Git بالانتقال وينقل تعديلاتك غير المحفوظة معك.
- إيقاف الانتقال عند التضارب: إذا كان الملف المعدل مختلفاً في الفرع الهدف، يرفض Git الانتقال لحماية عملك من الضياع؛ وعندها يجب حفظ التعديل عبر
git commitأو تخزينه مؤقتاً عبرgit stashثم التنقل بأمان.
# Shelve uncommitted edits before switching branches
git stash push -m "WIP: form styles"
git switch main
git status -s
يوضح الجدول التالي المقابلات الدقيقة بين صيغ الأمر التقليدي متعدد المهام git checkout والأوامر الحديثة المتخصصة git switch وgit restore:
| المهمة المطلوبة | الأمر الحديث الموصى به (Git 2.23+) | الأمر التقليدي المكافئ |
|---|---|---|
| الانتقال إلى فرع موجود | git switch main | git checkout main |
| إنشاء فرع جديد والانتقال إليه | git switch -c feat-ui | git checkout -b feat-ui |
| العودة إلى الفرع النشط السابق | git switch - | git checkout - |
| معاينة التزام سابق (مؤشر منفصل) | git switch --detach a1b2c3d | git checkout a1b2c3d |
| إلغاء تعديلات ملف في مجلد العمل | git restore index.html | git checkout -- index.html |
ملخص الدرس
حصاد الدرسمراجعة مركّزة لأهم المفاهيم والقواعد الهندسية التي أتقنتها في هذا الدرس قبل التطبيق العملي
ماذا تعلّمت في هذا الدرس؟
أتقنت في هذا الدرس التنقل بين الفروع عبر الأمر الحديث git switch، وإنشاء الفروع والانتقال إليها بخطوة واحدة عبر -c، ومقارنتها بالأمر الكلاسيكي git checkout، وفهم حالة المؤشر المنفصل والتعامل الآمن مع التعديلات غير المحفوظة. الخطوة التالية: انتقل الآن إلى الدرس رقم 22 «دمج الفروع عبر الأمر git merge» لضم تعديلات الفروع المكتملة إلى الفرع الرئيسي.
سجّل الدخول لحفظ تقدمك
تابع إنجاز المواضيع والمصطلحات والمهام، وكمّل من آخر خطوة على أي جهاز.
المصطلحات4
راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.
- 01 Detached HEAD حالة المؤشر المنفصل
- حالة يشير فيها مؤشر HEAD مباشرة إلى بصمة التزام معين بدلاً من الإشارة إلى اسم فرع محلي.
- للمراجعة
- 02 Branch Switching تبديل الفروع
- نقل مؤشر HEAD إلى فرع آخر مع تحديث منطقة التجهيز وملفات مجلد العمل لتطابق لقطة ذلك الفرع.
- للمراجعة
- 03 Orphaned Commit الالتزام اليتيم
- التزام أُنشئ أثناء حالة المؤشر المنفصل ولم يعد أي فرع أو وسم يشير إليه بعد الانتقال لفرع آخر.
- للمراجعة
- 04 Previous Branch Shortcut (-) اختصار الفرع السابق (-)
- تمرير شرطة مفردة للأمر git switch - للعودة الفورية إلى الفرع الذي كنت تعمل عليه قبل الانتقال الأخير.
- للمراجعة
لا توجد بطاقات تطابق البحث والتصفية.
اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.
الاختصارات4
راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.
- 01 HEAD HEAD
- Active Workspace Reference Pointer
- المؤشر المرجعي النشط الذي يتحدث في كل مرة تنتقل فيها بين الفروع عبر git switch أو git checkout.
- للمراجعة
- 02 WIP WIP
- Work In Progress
- التعديلات قيد الإنجاز التي يُفضل حفظها مؤقتاً بـ git stash قبل الانتقال لفرع آخر.
- للمراجعة
- 03 SHA-1 SHA-1
- Secure Hash Algorithm 1
- بصمة الالتزام التي تُكتب مباشرة داخل ملف .git/HEAD عند الدخول في وضع المؤشر المنفصل.
- للمراجعة
- 04 CLI CLI
- Command Line Interface
- واجهة سطر الأوامر التي تفصل بوضوح بين أوامر الفروع وأوامر استعادة الملفات.
- للمراجعة
لا توجد بطاقات تطابق البحث والتصفية.
اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.
مهامك قبل الاختبار
خطوة صغيرة كل مرة. وإنجاز تقدر ترجع له.
-
نفّذ الأمر git switch -c feat/hero-banner، وتحقق من الفرع النشط عبر git status -s -b، ثم عد للفرع السابق عبر git switch -.
-
نفّذ git switch --detach HEAD~1 لمعاينة الالتزام السابق، ثم اربط موقعك بفرع جديد عبر git switch -c rescued-branch.
تأشير المهمة إقرار منك بإتمامها، وليس تصحيحًا آليًا للكود. يُحفظ تقدمك في حسابك.
اختبر فهمك.
ووصلها للإتقان.
كل سؤال خطوة لقدّام. اختار، اكتب كود، وشوف نتيجتك فورًا.
أكمل المهام، واجمع كل الإجابات الصحيحة. أقل من 100%؟ راجع وأعد المحاولة.
الأسئلة متاحة للاطلاع. سجّل الدخول للتفاعل وحفظ تقدمك.
لمحة عن التحدي10 أسئلة تنتظرك +
أي أمر حديث في Git ينشئ فرعاً جديداً باسم feat-cart وينتقل إليه في خطوة واحدة؟
ينشئ الأمر git switch -c feat-cart الفرع الجديد وينقل مؤشر HEAD إليه فوراً.
لماذا قدّم الإصدار 2.23 من Git الأمرين المتخصصين git switch وgit restore؟
لفصل مهام الأمر المزدحم git checkout بحيث يختص switch بالفروع ويختص restore باستعادة الملفات.
ما المقابل التقليدي بالأمر git checkout للأمر الحديث git switch -c feature-login؟
يكافئ الأمر التقليدي git checkout -b feature-login الأمر الحديث git switch -c feature-login.
ماذا يفعل تشغيل الأمر المختصر git switch - (بشرطة واحدة)؟
يعيدك فوراً إلى الفرع النشط السابق الذي كنت عليه قبل الانتقال الأخير.
في حالة المؤشر المنفصل (Detached HEAD)، يشير مؤشر HEAD مباشرة إلى بصمة الالتزام بدلاً من اسم الفرع.
صواب؛ في وضع الانفصال يحفظ ملف .git/HEAD بصمة الالتزام مباشرة دون فرع وسيط.
كيف تحفظ بأمان الالتزامات الجديدة التي أنشأتها أثناء وجودك في حالة المؤشر المنفصل؟
أنشئ فرعاً جديداً في موقعك الحالي عبر git switch -c <new-branch> قبل الانتقال لأي فرع آخر.
ماذا يحدث عندما تحاول تبديل الفرع ولديك تعديلات غير محفوظة تتضارب مع نسخة الملف في الفرع الهدف؟
يرفض Git إتمام الانتقال ويظهر تنبيهاً لحماية تعديلاتك غير المحفوظة من الاستبدال والضياع.
على عكس git checkout، يشترط الأمر git switch تمرير الخيار الصريح --detach عند الانتقال لبصمة التزام.
صواب؛ يحميك git switch من الدخول غير المقصود في وضع المؤشر المنفصل باشتراط الخيار --detach.
ما المناطق الثلاث التي يحدّثها الأمر git switch عند الانتقال إلى فرع آخر؟
يحدّث المؤشر HEAD، ومنطقة التجهيز (Index)، وملفات مجلد العمل (Working Tree).
أي أمر يحفظ التعديلات غير المكتملة مؤقتاً قبل الانتقال إلى الفرع main لإصلاح طارئ؟
يحفظ الأمر git stash push التعديلات غير المحفوظة مؤقتاً ليصبح مجلد العمل نظيفاً وجاهزاً للتنقل.