التبديل بين الفروع في Git: كيفية تغيير الفرع والتنقل بين الإصدارات باحتراف
التبديل بين الفروع في Git
يُعدّ التنقل بين الفروع من أكثر المهام تكراراً عند العمل باستخدام Git، سواء كنت تطوّر ميزة جديدة، أو تراجع تعديلات قديمة، أو تختبر إصداراً معيناً من المشروع. فهم طريقة الانتقال بين الفروع بشكل صحيح يساعدك على تنظيم العمل وتجنّب الأخطاء، خصوصاً في المشاريع التي تضم أكثر من مسار تطوير.
في هذا الدليل، ستتعرّف على كيفية استخدام الأمر git checkout للتبديل بين الفروع، وإنشاء فرع جديد، والانتقال إلى commit محدد، مع شرح مبسّط لمفهوم detached HEAD.

كيفية إنشاء فرع جديد في Git
لإنشاء فرع جديد والانتقال إليه مباشرة، يمكنك استخدام الأمر git checkout مع الخيار -b متبوعاً باسم الفرع الجديد. عند تنفيذ هذا الأمر، سيُنشئ Git الفرع انطلاقاً من موقعك الحالي في سجل المشروع.
هذا يعني أن الفرع الجديد يبدأ من نفس النقطة التي كان عليها الفرع الحالي وقت الإنشاء.
(master)$ git checkout -b my-feature
Switched to a new branch 'my-feature'
(my-feature)$
في المثال السابق، تم إنشاء فرع جديد باسم my-feature انطلاقاً من الفرع master، ثم انتقلنا إليه مباشرة.
متى تحتاج إلى إنشاء فرع جديد؟
- عند تطوير ميزة جديدة دون التأثير على الفرع الرئيسي.
- عند إصلاح خطأ برمجي في مسار منفصل.
- عند تجربة تعديلات مؤقتة قبل دمجها لاحقاً.
كيفية التبديل إلى فرع موجود
إذا كان الفرع موجوداً مسبقاً، فلا تحتاج إلى استخدام الخيار -b. يكفي تمرير اسم الفرع إلى الأمر git checkout للانتقال إليه.
(my-feature)$ git checkout master
Switched to branch 'master'
(master)$
بهذه الطريقة، ينتقل المؤشر الحالي إلى الفرع master لتتابع العمل عليه.
الرجوع السريع إلى الفرع السابق
يوفّر Git اختصاراً مفيداً جداً للعودة إلى آخر فرع كنت تعمل عليه، وذلك باستخدام git checkout -. هذا الأسلوب مناسب عندما تتنقل كثيراً بين فرعين أثناء التطوير أو المراجعة.
(my-feature)$ git checkout -
Switched to branch 'master'
(master)$ git checkout -
Switched to branch 'my-feature'
(my-feature)$
كيفية الانتقال إلى commit محدد
لا يقتصر الأمر git checkout على الفروع فقط، بل يمكنك أيضاً استخدامه للانتقال إلى commit محدد عبر تمرير قيمة SHA الخاصة به بدلاً من اسم الفرع.
من المهم أن تعرف أن الفروع في Git هي في الأساس مؤشرات تشير إلى نقاط محددة داخل سجل التعديلات. لذلك، عندما تنتقل إلى commit معيّن، فأنت تطلب من Git عرض حالة المشروع كما كانت في تلك اللحظة.
كيفية العثور على قيمة SHA
يمكنك الوصول إلى معرف SHA الخاص بأي commit عبر عرض سجل المشروع باستخدام الأمر git log.
(my-feature)$ git log
commit 94ab1fe28727b7f8b683a0084e00a9ec808d6d39 (HEAD -> my-feature, master)
Author: John Mosesman <johnmosesman@gmail.com>
Date: Mon Apr 12 10:31:11 2021 -0500
This is the second commmit message.
commit 035a128d2e66eb9fe3032036b3415e60c728f692 (blah)
Author: John Mosesman <johnmosesman@gmail.com>
Date: Mon Apr 12 10:31:05 2021 -0500
This is the first commmit message.
في بداية كل commit ستجد سلسلة طويلة من الأحرف والأرقام بعد كلمة commit. هذه السلسلة تُعرف باسم SHA، وهي معرّف فريد لكل عملية حفظ في المشروع.
للانتقال إلى commit معين، استخدم الأمر التالي:
(my-feature)$ git checkout 035a128d2e66eb9fe3032036b3415e60c728f692
Note: switching to '035a128d2e66eb9fe3032036b3415e60c728f692'.
You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.
If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:
git switch -c <new-branch-name>
Or undo this operation with:
git switch -
Turn off this advice by setting config variable advice.detachedHead to false
HEAD is now at 035a128
((HEAD detached at 035a128))$
عملياً، لا تحتاج غالباً إلى كتابة قيمة SHA كاملة. في كثير من المشاريع، يكفي استخدام أول أربعة أو خمسة أحرف إذا كانت كافية لتمييز commit المطلوب بشكل فريد.
ما معنى حالة detached HEAD؟
عند الانتقال مباشرة إلى commit محدد بدلاً من فرع مسمّى، ستدخل في حالة تُعرف باسم detached HEAD. هذا يعني أن المؤشر HEAD لم يعد يشير إلى فرع مثل master أو my-feature، بل أصبح يشير مباشرة إلى نقطة محددة في السجل.
بصياغة أبسط، أنت تتصفح نسخة من المشروع في لحظة زمنية معينة دون أن تكون على فرع فعلي. لذلك، إذا أجريت تعديلات جديدة من هذا الموضع، فلن تُنسب تلقائياً إلى فرع معروف ما لم تنشئ فرعاً جديداً.
لماذا ينبّهك Git عند هذه الحالة؟
يُظهر Git هذا التنبيه لأنه يفترض أنك قد تكون بصدد الاستكشاف أو الاختبار فقط. وهو يمنحك بيئة آمنة للتجربة دون التأثير على الفروع الموجودة.
You are in 'detached HEAD' state. You can look around, make experimental changes and commit them, and you can discard any commits you make in this state without impacting any branches by switching back to a branch.
ماذا يمكنك أن تفعل من هذه الحالة؟
- إجراء تجربة مؤقتة ثم تجاهل التغييرات بالعودة إلى الفرع السابق.
- الاحتفاظ بالتعديلات عبر إنشاء فرع جديد من نفس النقطة.
إذا أردت التراجع والعودة إلى فرعك السابق، يمكنك استخدام الأمر git switch -. أما إذا رغبت في متابعة العمل انطلاقاً من هذا commit، فمن الأفضل إنشاء فرع جديد باستخدام git switch -c <new-branch-name>.
ملاحظات مهمة عند استخدام git checkout
- الأمر
git checkoutمتعدد الاستخدامات، لذلك يجب الانتباه إلى السياق الذي تعمل فيه. - عند إنشاء فرع جديد، تأكد أنك تقف على الفرع الصحيح قبل التنفيذ.
- الانتقال إلى
commitمحدد مناسب للمراجعة والاختبار، لكنه ليس أفضل وضع لمتابعة التطوير طويل المدى دون إنشاء فرع. - في الإصدارات الحديثة من
Git، يُستخدم أحياناً الأمرgit switchكبديل أوضح للتعامل مع الفروع.
الخلاصة التقنية
يُعدّ الأمر git checkout من الأوامر الأساسية في Git لأنه يتيح لك إنشاء الفروع، والتنقل بينها، والوصول إلى commitات سابقة بسهولة. لكن الاستخدام الاحترافي يتطلب فهماً واضحاً لما يحدث داخلياً، خصوصاً عند الدخول في حالة detached HEAD. إذا كنت تعمل ضمن سير تطوير منظم، فاحرص على استخدام الفروع لعزل التغييرات، واستفد من أوامر مثل git switch وgit log لتبسيط التنقل وإدارة تاريخ المشروع بكفاءة.