• صفحه اصلی
  • مهارت‌ها
  • پروژه‌ها
  • بلاگ
  • مشاوره
  • تماس با من
مشاورهرزومه
Naser Rasouli

نویسنده

Naser Rasouli

توسعه‌دهنده فرانت‌اند؛ اینجا تجربه‌ها و یادداشت‌های واقعی‌ام از پروژه‌ها را می‌نویسم.

GitHubLinkedIn

آخرین نوشته‌ها

متدولوژی BEM در CSS: نام‌گذاری استاندارد برای کدهای تمیز
2026-02-18•1 دقیقه مطالعه

متدولوژی BEM در CSS: نام‌گذاری استاندارد برای کدهای تمیز

راهنمای عملی BEM برای جلوگیری از تداخل استایل، ساختاردهی کلاس‌ها و نگهداری ساده‌تر CSS.

بررسی نحوه به‌روزرسانی state در React
2026-02-11•1 دقیقه مطالعه

بررسی نحوه به‌روزرسانی state در React

setState بلافاصله state را عوض نمی‌کند؛ همین باعث می‌شود console.log مقدار قبلی را لاگ کند. این راهنما توضیح می‌دهد چرا و چطور مقدار جدید را درست دریافت کنیم.

تابع Cleanup در useEffect: از باگ‌های پنهان تا الگوهای درست
2026-02-04•1 دقیقه مطالعه

تابع Cleanup در useEffect: از باگ‌های پنهان تا الگوهای درست

راهنمای عملی نوشتن cleanup در useEffect تا از memory leak، لیسنرهای تکراری و setState روی کامپوننت unmounted جلوگیری کنید.

تسلط به Git Flow

تسلط به Git Flow

2025-12-08
gitworkflowbranching

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ها و ریویوها روی شاخه‌های مشخص و هم‌نام انجام می‌شود.

فرایند مرج ساده

  1. فیچر را در feature/* می‌زنی، می‌سازی و تست می‌گیری.
  2. قبل PR به develop، یک git rebase develop (یا اگر تیم می‌خواهد، merge معمولی) می‌کنی که تاریخچه تمیز شود.
  3. وقتی develop آمادهٔ انتشار است، release/x.y.z را می‌سازی، باگ‌های ریز را همینجا می‌بندی و بعد به main و develop مرج می‌کنی. روی main تگ vX.Y.Z می‌خورد.
  4. اگر باگ فوری داشتیم، 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 مرج کن. از همین قدم ساده، کم‌کم ریتم تیم جا می‌افتد و می‌بینی چقدر مرج‌ها تمیزتر و دردسرها کمتر می‌شود.