Git و GitHub

العمل مع الفروع

13 دقيقة الدرس 9 من 35

العمل مع الفروع

الفروع هي واحدة من أقوى ميزات Git، مما يتيح التطوير الموازي والتجريب وسير العمل المنظم. في هذا الدرس، ستتقن إنشاء الفروع والتنقل والإدارة وأفضل الممارسات.

ما هي الفروع؟

الفرع هو مؤشر خفيف الوزن قابل للحركة إلى التزام. فكر فيه كخط منفصل للتطوير:

فرع Main/Master: الفرع الأساسي (كود جاهز للإنتاج) فروع الميزات: تطوير معزول للميزات الجديدة فروع إصلاح الأخطاء: إصلاح أخطاء محددة فروع الإصلاحات العاجلة: إصلاحات الإنتاج العاجلة فروع تجريبية: اختبار الأفكار بدون مخاطر
حقيقة مهمة: الفروع في Git خفيفة الوزن بشكل لا يصدق - إنها مجرد ملفات بحجم 41 بايت تحتوي على hash SHA-1. إنشاء والتبديل بين الفروع شبه فوري، حتى في المستودعات الكبيرة!

لماذا نستخدم الفروع؟

الفوائد: ✓ عزل العمل - تطوير الميزات دون التأثير على الكود الرئيسي ✓ تطوير موازي - عدة أعضاء في الفريق يعملون في وقت واحد ✓ التجريب - تجربة الأفكار بدون مخاطر ✓ تبديل السياق - العمل على مهام متعددة بسهولة ✓ مراجعة الكود - مراجعة التغييرات قبل الدمج في main ✓ سير عمل منظم - فصل واضح للاهتمامات

إنشاء الفروع

طرق متعددة لإنشاء الفروع:

# إنشاء فرع جديد (لا ينتقل إليه) git branch feature-login # إنشاء والانتقال إلى فرع جديد git checkout -b feature-login # الطريقة الحديثة (Git 2.23+) git switch -c feature-login # إنشاء فرع من التزام محدد git branch bugfix-header abc123 # إنشاء فرع من فرع آخر git branch feature-payment feature-login # إنشاء فرع وتتبع البعيد git checkout -b local-name origin/remote-branch
نصيحة: استخدم git switch (Git 2.23+) للوضوح: git switch يبدل الفروع، git checkout يفعل أشياء كثيرة. الأمر الجديد يجعل نواياك أوضح.

التبديل بين الفروع

التنقل بين الفروع:

# الانتقال إلى فرع موجود (الطريقة القديمة) git checkout main # الانتقال إلى فرع (الطريقة الحديثة) git switch main # الانتقال إلى الفرع السابق git switch - # إنشاء والانتقال إلى فرع جديد git switch -c new-feature # التبديل مع تغييرات غير ملتزمة (Git يخزن تلقائياً) git switch other-branch # قد يفشل إذا كانت هناك تعارضات
تحذير: يجب أن تكون التغييرات غير الملتزمة في دليل عملك متوافقة مع الفرع المستهدف. إذا كانت هناك تعارضات، ستمنع Git التبديل. إما التزم أو خزن أو تجاهل التغييرات أولاً.

سرد الفروع

عرض جميع الفروع وحالتها:

# سرد الفروع المحلية (* تحدد الحالي) git branch # سرد جميع الفروع (محلي + بعيد) git branch -a # سرد الفروع البعيدة فقط git branch -r # سرد مع آخر التزام على كل فرع git branch -v # سرد الفروع المدمجة git branch --merged # سرد الفروع غير المدمجة git branch --no-merged # سرد الفروع مع مزيد من التفاصيل git branch -vv # يعرض معلومات التتبع

اصطلاحات تسمية الفروع

استخدم أسماء واضحة ووصفية تتبع اصطلاحات فريقك:

الأنماط الشائعة: feature/user-authentication feature/payment-integration bugfix/header-alignment bugfix/login-error hotfix/security-patch release/v1.2.0 experimental/new-design أفضل الممارسات: ✓ استخدم الأحرف الصغيرة والشرطات ✓ ضمّن بادئة النوع (feature/, bugfix/) ✓ كن وصفياً ولكن موجزاً ✓ استخدم أرقام المشاكل: feature/123-user-profile ✓ تجنب الأحرف الخاصة والمسافات أمثلة: ✓ feature/add-shopping-cart ✓ bugfix/fix-checkout-error ✓ hotfix/patch-security-issue ✗ my-branch (غامض جداً) ✗ FEATURE (أحرف كبيرة) ✗ new feature (مسافات)
اصطلاح الفريق: اتبع دائماً اصطلاحات التسمية لفريقك. الاتساق أهم من التفضيل الشخصي!

حذف الفروع

إزالة الفروع التي لم تعد بحاجة إليها:

# حذف فرع مدمج بالكامل git branch -d feature-login # حذف قسري (حتى لو لم يتم الدمج) git branch -D experimental-feature # حذف فرع بعيد git push origin --delete feature-login git push origin :feature-login # بناء جملة قديم # حذف فروع متعددة git branch -d feature-1 feature-2 feature-3 # حذف جميع الفروع المدمجة باستثناء main git branch --merged | grep -v "\*\|main\|master" | xargs git branch -d
تحذير: git branch -D يحذف قسرياً الفروع حتى لو كانت تحتوي على عمل غير مدمج. تأكد من أنك لا تحتاج إلى هذا العمل قبل استخدام علامة القوة!

إعادة تسمية الفروع

تغيير أسماء الفروع:

# إعادة تسمية الفرع الحالي git branch -m new-name # إعادة تسمية فرع آخر git branch -m old-name new-name # إعادة التسمية وتحديث البعيد git branch -m old-name new-name git push origin --delete old-name git push origin new-name git push origin -u new-name # تعيين upstream

تتبع الفروع

ربط الفروع المحلية بالفروع البعيدة:

# إنشاء فرع يتتبع البعيد git checkout -b local-branch origin/remote-branch # تعيين upstream للفرع الحالي git branch -u origin/main # الدفع وتعيين تتبع upstream git push -u origin feature-branch # عرض معلومات التتبع git branch -vv # إزالة تتبع upstream git branch --unset-upstream
نصيحة احترافية: استخدم دائماً git push -u origin branch-name عند دفع فرع جديد لأول مرة. هذا يعين التتبع ويسمح لك ببساطة باستخدام git push و git pull دون تحديد البعيد والفرع.

حالة HEAD المنفصلة

فهم والعمل مع HEAD المنفصلة:

# الانتقال إلى التزام محدد (HEAD منفصلة) git checkout abc123 # تحذير HEAD منفصلة: # أنت في حالة 'HEAD منفصلة'. يمكنك النظر حولك، # وإجراء تغييرات تجريبية والتزامها، ويمكنك # تجاهل أي التزامات تقوم بها في هذه الحالة. # العمل في HEAD منفصلة git checkout abc123 # إجراء تغييرات والالتزام git add . git commit -m "تغيير تجريبي" # حفظ العمل من HEAD منفصلة git branch save-experiment git switch main # أو إرفاق HEAD بفرع جديد git checkout -b new-branch
الفهم: HEAD المنفصلة تعني أنك لست على أي فرع - أنت مباشرة على التزام. أي التزامات تقوم بها لن تنتمي إلى فرع إلا إذا أنشأت واحداً. إنه مفيد لعرض الكود القديم أو التجارب السريعة.

استراتيجيات إدارة الفروع

فروع قصيرة العمر: - فروع الميزات المحذوفة بعد الدمج - تعيش عادة لأيام أو أسابيع - حافظ على فرع main نظيفاً ومستقراً فروع طويلة العمر: - main/master - كود الإنتاج - develop - فرع التكامل - staging - اختبار ما قبل الإنتاج - قد تعيش لأشهر أو سنوات فروع شخصية: - بادئة باسمك: john/feature-x - تجربة حرة - احذف أو ادمج عند الانتهاء

سير عمل الفروع العملي

مثال سير عمل كامل:

# 1. ابدأ من main git switch main git pull origin main # 2. أنشئ فرع ميزة git switch -c feature/user-profile # 3. اعمل على الميزة (التزامات متعددة) git add profile.js git commit -m "Add user profile component" git add profile.css git commit -m "Style user profile page" # 4. حافظ على تحديث الفرع مع main git switch main git pull origin main git switch feature/user-profile git merge main # أو rebase # 5. ادفع فرع الميزة git push -u origin feature/user-profile # 6. بعد دمج PR، نظف git switch main git pull origin main git branch -d feature/user-profile git push origin --delete feature/user-profile

عرض اختلافات الفروع

قارن الفروع لفهم الاختلافات:

# إظهار الالتزامات في feature وليست في main git log main..feature-branch # إظهار الالتزامات في main وليست في feature git log feature-branch..main # إظهار اختلافات الملفات بين الفروع git diff main..feature-branch # إظهار أسماء الملفات المتغيرة فقط git diff --name-only main..feature-branch # إظهار إحصائيات التغييرات git diff --stat main..feature-branch # مقارنة ملف محدد عبر الفروع git diff main..feature-branch -- path/to/file.js

تمرين تطبيقي:

السيناريو: أنشئ سير عمل فروع كامل:

  1. أنشئ فرع ميزة جديد يسمى feature/add-footer
  2. قم بالتزامين على هذا الفرع
  3. اسرد جميع الفروع وتأكد من أنك على فرع الميزة
  4. عد إلى main
  5. عرض الاختلافات بين main وفرع الميزة الخاص بك
  6. احذف فرع الميزة

الأوامر:

# 1. أنشئ وانتقل إلى فرع الميزة git switch -c feature/add-footer # 2. قم بإجراء تغييرات والتزم echo "<footer>Copyright 2024</footer>" > footer.html git add footer.html git commit -m "Add footer HTML structure" echo "footer { background: #333; }" > footer.css git add footer.css git commit -m "Add footer CSS styling" # 3. اسرد الفروع git branch -v # 4. انتقل إلى main git switch main # 5. عرض الاختلافات git log main..feature/add-footer --oneline git diff main..feature/add-footer --stat # 6. احذف الفرع (فقط إذا تم الدمج أو استخدم -D للقسر) git branch -d feature/add-footer

أفضل ممارسات الفروع

✓ افعل: - أنشئ فروعاً لكل ميزة/إصلاح - استخدم أسماء فروع وصفية - احتفظ بالفروع قصيرة العمر - احذف الفروع المدمجة - حدّث فروع الميزات بانتظام مع main - عيّن تتبع upstream للفروع البعيدة - راجع التغييرات قبل التبديل بين الفروع ✗ لا تفعل: - اعمل مباشرة على main/master - اترك الفروع تصبح قديمة (متأخرة) - استخدم أسماء غامضة مثل "test" أو "branch1" - قسر التبديل مع تغييرات غير ملتزمة - احتفظ بالفروع المدمجة القديمة - شارك فروع التجارب الشخصية - انسَ سحب main قبل إنشاء فرع

الملخص

في هذا الدرس، تعلمت:

  • ما هي الفروع ولماذا هي أساسية للتطوير
  • إنشاء الفروع باستخدام git branch و git switch -c
  • التبديل بين الفروع بأمان
  • سرد الفروع مع مرشحات متنوعة
  • اصطلاحات تسمية الفروع وأفضل الممارسات
  • حذف وإعادة تسمية الفروع
  • إعداد علاقات التتبع مع الفروع البعيدة
  • فهم حالة HEAD المنفصلة
  • سير عمل فروع كامل للميزات وإصلاحات الأخطاء
التالي: في الدرس التالي، سنستكشف دمج الفروع - الجمع بين خطوط التطوير المختلفة والتعامل مع تعارضات الدمج!

ES
Edrees Salih
منذ 17 ساعة

We are still cooking the magic in the way!