Feature Branch — هي تقنية تفرع في Git يتم بموجبها تطوير كل ميزة جديدة في فرع منفصل، معزول عن الكود الرئيسي. وهذا يسمح للعديد من المطورين بالعمل في وقت واحد على مهام مختلفة دون خطر إتلاف النسخة المستقرة من المشروع. وفقًا لـ Atlassian، 2024، فإن Feature Branch عنصر أساسي في Git Flow ويُستخدم في معظم المشاريع التجارية.
أهم النقاط
feature/اسم-الوظيفة في Git Flow القياسي.Feature Branch (فرع الميزة) هو فرع مؤقت في Git يتم إنشاؤه من develop لتطوير وظيفة معينة. على عكس الفروع طويلة العمر main و develop، توجد فروع feature لفترة محدودة — من بضع ساعات إلى بضعة أسابيع.
الهدف الرئيسي من feature branch هو عزل التغييرات المرتبطة بمهمة واحدة عن باقي الكود. يمكن للمطور التجربة وإجراء العديد من commits وحتى كسر الكود في فرعه الخاص دون التأثير على عمل أعضاء الفريق الآخرين.
بعد اكتمال التطوير، يتم دمج feature branch مرة أخرى في develop عبر Pull Request مع مراجعة إلزامية للكود. بعد الدمج، يتم حذف الفرع عادةً للحفاظ على نظافة المستودع.
وفقًا لـ Vincent Driessen، 2010، أصبح نموذج Git Flow مع فروع feature معيارًا صناعيًا بفضل الفصل الواضح للمسؤوليات بين أنواع الفروع المختلفة.
سير العمل مع feature branch يتكون من سلسلة من الخطوات التي يقوم بها المطور لكل ميزة جديدة. هذه العملية تقلل من تعارضات الدمج وتضمن مراقبة جودة الكود.
المزامنة الدورية مع develop مهمة جدًا. كلما عاش فرع feature لفترة أطول دون دمج تغييرات من develop، زاد احتمال حدوث تعارضات في الدمج النهائي.
| وتيرة المزامنة | خطر التعارضات | سهولة التطوير |
|---|---|---|
| يوميًا | منخفض | يتطلب rebase أو merge متكرر |
| أسبوعيًا | متوسط | وتيرة مريحة، تعارضات معتدلة |
| شهريًا | مرتفع | خطر حل تعارضات دمج معقدة |
| أبدًا | خطير | قد يكون الدمج مستحيلًا دون فقدان البيانات |
تسمية الفروع هي جزء مهم من انضباط الفريق. معيار تسمية موحد يسمح بتحديد سريع للمهمة التي يتم العمل عليها ومن يقوم بها.
feature/added-auth-module.feature/PROJ-42-add-login.feature/feat/analytics-dashboard.استخدام معرّف المهمة من JIRA أو Trello أو نظام آخر هو أفضل ممارسة. فهو يربط الكود تلقائيًا بالمهمة ويبسط البحث عن الفروع عبر git log.
Pull Request (أو Merge Request في GitLab) هو طلب لدمج فرع feature في develop. PR ليس مجرد عملية تقنية، بل هو عملية مراجعة كود جماعية ترفع جودة الكود وتنشر المعرفة داخل الفريق.
يحتوي PR الجيد على عنوان بوصف مختصر للمهمة، رابط للتذكرة ووصف للتغييرات. يجب على المطور توضيح ما تم فعله بالضبط، وما هي الملفات التي تم تغييرها وما إذا كانت هناك مخاطر محتملة لأجزاء أخرى من المشروع.
يراجع الفريق الكود في PR، ويترك تعليقات، ويطلب تغييرات (change requests) ويوافق على الدمج (approve). بعد الموافقة، يتم تنفيذ merge أو squash merge.
متوسط وقت مراجعة PR في تطوير التطبيقات المحمولة يتراوح من 4 إلى 24 ساعة. مكتبة Danger تؤتمت جزءًا من الفحوصات، بتشغيل linters واختبارات مباشرة في PR.
بعد الموافقة على PR، يمكن دمج فرع feature في develop بطرق مختلفة. يؤثر اختيار استراتيجية الدمج على تاريخ commits وإمكانية التراجع عن التغييرات.
للمشاريع المحمولة ذات الإصدارات المتكررة، يُستخدم squash merge في الغالب: فهو يعطي تاريخًا نظيفًا في develop، بينما تبقى تفاصيل التطوير في وصف PR ومهمة tracker.
حتى المطورون ذوو الخبرة يرتكبون أخطاء عند العمل مع فروع feature. معرفة المشكلات النموذجية تساعد في تجنب إضاعة الوقت والبيانات.
أفضل طريقة لتجنب هذه المشكلات هي الاتفاق على قواعد العمل في بداية المشروع واستخدام الفحوصات الآلية في خط أنابيب CI/CD.
لننظر في سيناريو عملي: مطور يبدأ ميزة مصادقة جديدة في تطبيق محمول. ينشئ فرع feature، يعمل على الكود ويكمل المهمة بـ Pull Request.
# تحديث develop وإنشاء فرع feature
git checkout develop
git pull origin develop
git checkout -b feature/add-login-screen
# العمل على الميزة: commits
git add src/ui/login/
git commit -m "Add login screen layout"
# دفع فرع feature إلى الخادم البعيد
git push origin feature/add-login-screen
# المزامنة مع develop (rebase)
git fetch origin develop
git rebase origin/develop
# بعد الموافقة على PR: تحديث develop المحلي وحذف الفرع
git checkout develop
git pull origin develop
git branch -d feature/add-login-screen
الأمر git branch -d يحذف الفرع فقط بعد دمج تغييراته بالكامل. إذا لم يُدمج الفرع، سيقترح Git استخدام git branch -D للحذف الإجباري — استخدم هذا العلم بحذر.
يجب تشغيل خط أنابيب CI/CD لكل فرع feature قبل إنشاء PR. هذا يسمح باكتشاف المشكلات في مرحلة مبكرة، قبل أن يصل الكود لمراجعة مطورين آخرين.
# GitHub Actions لفحص فرع feature
name: Feature Branch CI
on:
push:
branches:
- 'feature/**'
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Run tests
run: ./gradlew test
- name: Lint check
run: ./gradlew lint
يتحقق خط الأنابيب من أن الكود يترجم، والاختبارات تمر، وأسلوب الكود يتوافق مع معايير الفريق. فقط بعد اجتياز جميع الفحوصات يمكن إنشاء Pull Request.
الأسئلة الشائعة
نعم، هذه ممارسة قياسية. يمكن لكل مطور العمل في فرع feature الخاص به، وجميعها تتزامن مع develop بشكل مستقل. القاعدة الرئيسية هي فرع واحد لكل مهمة لتجنب التبعيات cross-task في الكود.
نفذ git rebase origin/develop على فرع feature الخاص بك. إذا نشأت تعارضات — حلها واحدًا تلو الآخر، ستُعاد كتابة commits فوق أحدث حالة develop. بعد rebase، ستحتاج إلى git push --force لتحديث الفرع البعيد.
إذا ألغيت المهمة، فيمكنك ببساطة حذف فرع feature. استخدم git branch -d feature/name للفرع المحلي و git push origin --delete feature/name للفرع البعيد. جميع التغييرات غير المُلتزمة ستُفقد.
هما نفس الشيء في الجوهر. فرق مختلفة تستخدم بادئات مختلفة: feature/ و task/ و feat/. لا فرق في آلية Git — جميعها فروع مؤقتة منشأة من develop للتطوير المعزول.
نعم، هذه ممارسة إلزامية. الفروع بعد الدمج تلوث قائمة المراجع وقد تسبب ارتباكًا. معظم المنصات (GitHub، GitLab) تعرض حذف الفرع فور دمج PR، والفروع المحلية تُحذف بالأمر git branch -d.
الخلاصة
سنقوم بتطوير تطبيق جوال جاهز
تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.
اقرأ أيضًا