Git Flow چیه؟
Git Flow یک مدل شاخهبندی معروفه که وینسنت دریسن ۲۰۱۰ معرفی کرد تا توسعهها، ریلیسها و فیکسهای اضطراری هرکدوم جای خودشون رو داشته باشن و همهچیز تمیز بمانه. ایده ساده است: کارهای مختلف رو تو شاخههای جدا انجام بده تا مرجها و تعارضها سراغت نیان.
شاخههای اصلی
- main: همیشه نسخهٔ پایدار و آمادهٔ انتشار. فقط خروجی Release یا Hotfix به اینجا میاد و معمولاً تگ میخوره.
- develop: زمین بازی تیم برای تغییرات روزانه. همهٔ فیچرها بعد از اتمام به اینجا برمیگردن.
- feature/: برای هر فیچر یک شاخه از
developمیزنی، مثلfeature/login. کار که تموم شد با PR بهdevelopبرمیگرده و شاخه حذف میشه. - release/: وقتی آمادهٔ انتشار نسخهای، از
developیک شاخه مثلrelease/1.4.0میسازی. باگهای ریز همینجا فیکس میشن. بعدش هم بهmainمرج میکنی (و تگ میزنی) و هم بهdevelopتا عقب نمونه. - hotfix/: اگر باگ فوری روی پروداکشن داری، مستقیم از
mainشاخهای مثلhotfix/1.4.1میزنی. فیکس که شد، به هر دو شاخهٔmainوdevelopمرج میکنی و رویmainتگ میزنی.
چرا Git Flow جواب میده؟
- وضوح: هر نوع کار (فیچر، ریلیس، هاتفیکس) مسیر خودش رو دارد.
- ریسک کمتر: فیچرها جدا هستند؛ تعارضها و بریک شدن پروداکشن کمتر میشود.
- قابل پیشبینی: همه میدانند مرج به
mainفقط از Release/Hotfix میآید. - هماهنگی تیمی: PRها و ریویوها روی شاخههای مشخص و همنام انجام میشود.
فرایند مرج ساده
- فیچر را در
feature/*میزنی، میسازی و تست میگیری. - قبل PR به
develop، یکgit rebase develop(یا اگر تیم میخواهد، merge معمولی) میکنی که تاریخچه تمیز شود. - وقتی
developآمادهٔ انتشار است،release/x.y.zرا میسازی، باگهای ریز را همینجا میبندی و بعد بهmainوdevelopمرج میکنی. رویmainتگvX.Y.Zمیخورد. - اگر باگ فوری داشتیم،
hotfix/x.y.zازmainمیزنیم و بعد از فیکس، بهmain(با تگ) وdevelopمرج میشود.
قواعد طلایی که دردسر را کم میکند
- قبل هر مرج، تستها را کامل بزن.
- نامگذاری ثابت:
feature/checkout,release/1.2.0,hotfix/1.2.1. - PR با توضیح کوتاه و لینک تسک. اگر تیم اجازه میدهد، حداقل یک نفر ریویو کند.
- روی Release/Hotfix ترجیحاً
rebaseنکن اگر تیم تاریخچهٔ خطی نمیخواهد؛ همان merge کمیت هم قابل قبول است. - چنجلاگ را کنار تگگذاری بهروز کن تا پروداکشن عقب نماند.
اگر تازه شروع میکنی
یک ریپو ساده را با این الگو تمرین کن:
git checkout develop
git checkout -b feature/first-task
# کد بزن...
git push -u origin feature/first-task
بعد با یک PR به develop مرج کن. از همین قدم ساده، کمکم ریتم تیم جا میافتد و میبینی چقدر مرجها تمیزتر و دردسرها کمتر میشود.
