جریانهای کاری شاخهها — Git Flow و GitHub Flow
استراتژیهای معروف سازماندهی شاخهها: Git Flow، GitHub Flow و Trunk-Based — کدام برای پروژه شما مناسب است؟
جریان کاری (Workflow) چیست؟
تا حالا یاد گرفتید شاخه بسازید، سوئیچ کنید و merge کنید. اما در پروژه واقعی سؤال بزرگتر هست: چطور شاخهها را سازماندهی کنیم؟ به این استراتژیها «جریان کاری» یا Workflow میگویند.
۱. GitHub Flow (ساده و مدرن) ⭐
محبوبترین جریان امروز — ساده و مناسب اکثر تیمها و پروژههای وب:
- شاخه
mainهمیشه قابل انتشار (deployable) است - برای هر کار جدید، شاخهای توصیفی بسازید:
feature/login - روی شاخه کامیت کنید و مرتب push کنید
- وقتی آماده شد، Pull Request باز کنید و بازبینی بگیرید
- بعد از تأیید، merge به main و انتشار!
main: A---B---C---D---E---F
\ /
feature: C1--C2--C3 (از B جدا و در D ادغام شده)
مناسب برای: پروژههای وب، استقرار مداوم (CI/CD)، تیمهای چابک
۲. Git Flow (کلاسیک و ساختاریافته)
جریان معروفی که توسط Vincent Driessen معرفی شد — برای پروژههای بزرگ با نسخهبندی رسمی:
| شاخه | نقش | عمر |
|---|---|---|
main | نسخههای انتشار (فقط merge) | همیشگی |
develop | ادغام قابلیتها در حال توسعه | همیشگی |
feature/* | هر قابلیت جدید (از develop جدا میشود) | موقت |
release/* | آمادهسازی نسخه جدید | موقت |
hotfix/* | رفع فوری باگ در نسخه منتشرشده | موقت |
main: A-----------------M------N
\ / \
develop: B---C---D---E---F (قابلیتها اینجا جمع میشوند)
\ /
feature/x: C1--C2
مناسب برای: نرمافزارهای نسخهدار (مثل اپ موبایل)، تیمهای بزرگ با چرخه انتشار مشخص
Git Flow برای پروژههای وب با استقرار مداوم معمولاً پیچیدهتر از نیاز است — GitHub Flow اغلب انتخاب بهتری است.
۳. Trunk-Based Development (پیشرفته)
توسعهدهندگان تغییرات کوچک و مکرر را مستقیم (یا با شاخههای چندساعته) به main میفرستند:
- شاخهها بسیار کوتاهعمر (چند ساعت تا یک روز)
- قابلیتهای نیمهکاره با Feature Flags مخفی میشوند
- مناسب تیمهای بسیار تجربهدار با تست خودکار قوی
- استفادهشده در گوگل و متا
کدام را انتخاب کنم؟
| وضعیت | پیشنهاد |
|---|---|
| پروژه شخصی / یادگیری | GitHub Flow (یا حتی فقط main!) |
| تیم کوچک، پروژه وب | GitHub Flow ⭐ |
| اپ موبایل با نسخهبندی | Git Flow |
| تیم بزرگ با CI/CD پیشرفته | Trunk-Based |
یک چرخه کامل GitHub Flow در عمل
# ۱. بهروزرسانی main:
git switch main
git pull origin main
# ۲. شاخه جدید برای قابلیت:
git switch -c feature/dark-mode
# ۳. کار و کامیت:
git add . && git commit -m "افزودن حالت تاریک"
# ۴. ارسال به ریموت:
git push -u origin feature/dark-mode
# ۵. ساخت Pull Request در گیتهاب و بازبینی...
# ۶. بعد از تأیید، merge در گیتهاب، سپس محلی:
git switch main
git pull origin main
git branch -d feature/dark-mode
قوانین مشترک همه جریانها
- main را خراب نکنید — هرگز مستقیم روی main کامیت نزنید (در تیم)
- نام شاخه گویا باشد —
fix/navbar-mobileنهali-branch - شاخهها کوتاهعمر باشند — merge سریع یعنی تعارض کم
- قبل از شاخه جدید، main را بگیرید — همیشه از آخرین وضعیت شروع کنید
خلاصه
- GitHub Flow: ساده — شاخه → PR → merge → انتشار (پیشنهادی برای شروع)
- Git Flow: ساختاریافته — main/develop/feature/release/hotfix
- Trunk-Based: شاخههای خیلی کوچک + feature flag
- برای اکثر پروژهها GitHub Flow کافی و عالی است
این مبحث بخشی از دوره آموزش کامل Git است.