Branch per Task چیست؟ اتصال شاخه Git، تسک و Pull Request

نویسنده: WKFGo Editorial · ·

Branch per Task چیست؟

در الگوی Branch per Task، برای هر واحد کار قابل تحویل یک شاخه کوتاه‌عمر Git ساخته می‌شود و نام شاخه شناسه تسک را حمل می‌کند. commit، pull request، نتیجه CI و وضعیت تحویل به همان شناسه وصل می‌شوند تا بتوان از نیاز محصول تا تغییر کد را ردیابی کرد.

این الگو به معنی «برای هر کار ریز یک branch» نیست. اگر یک تسک چند تغییر مستقل و قابل انتشار دارد، باید شکسته شود؛ اگر چند commit یک هدف واحد دارند، یک شاخه کافی است.

قرارداد نام‌گذاری

یک قالب ساده و قابل پردازش انتخاب کنید:

feature/TASK-442-payment-retry
fix/TASK-517-jalali-date-filter
chore/TASK-601-upgrade-sdk

بخش ضروری شناسه تسک است؛ توضیح کوتاه برای انسان مفید است. نام شخص، تاریخ یا عبارت‌هایی مثل final-fix ردیابی پایداری نمی‌سازند.

برای incident یا hotfix نیز قرارداد جدا اما هم‌خانواده داشته باشید:

hotfix/INC-83-checkout-timeout

۱. تسک را آماده کنید

هدف، معیار پذیرش، ریسک و وابستگی روشن باشند. شاخه‌ای که از تسک مبهم شروع می‌شود، معمولاً pull request بزرگ و رفت‌وبرگشت زیاد می‌سازد.

۲. شاخه را از مبنای درست بسازید

تیم مشخص کند شاخه از main، release branch یا شاخه دیگری ایجاد می‌شود. مبنای اشتباه conflict و تغییر ناخواسته وارد PR می‌کند.

۳. کامیت‌های منسجم بسازید

هر کامیت یک تغییر قابل توضیح داشته باشد و در صورت سیاست تیم شناسه تسک را در پیام نگه دارد. کامیت‌های بسیار بزرگ بازبینی را سخت و کامیت‌های صرفاً «fix» تاریخچه را بی‌ارزش می‌کنند.

۴. زود push و draft PR ایجاد کنید

Draft PR دید زودهنگام درباره جهت تغییر و CI می‌دهد. لازم نیست تا پایان کامل کار صبر کنید؛ اما درخواست review رسمی فقط وقتی معیارها و تست‌ها آماده‌اند ارسال شود.

۵. وضعیت را همگام کنید

ساخت شاخه می‌تواند تسک را «در حال انجام»، ایجاد PR آن را «در بازبینی» و merge موفق آن را «آماده انتشار» کند. خودکارسازی نباید وضعیت کسب‌وکاری را کورکورانه ببندد؛ merge کد همیشه به معنی تحویل به کاربر نیست.

۶. پس از merge شاخه را حذف کنید

شاخه کوتاه‌عمر باید بعد از ادغام پاک شود. retention طولانی برای شاخه merge‌شده فهرست را شلوغ و انتخاب مبنا را پرخطا می‌کند؛ تاریخچه در commit و PR باقی می‌ماند.

تسک مناسب چه اندازه‌ای دارد؟

نشانه‌های شاخه بیش از حد بزرگ:

نشانه شاخه بیش از حد ریز: چند branch فقط برای تغییراتی ساخته شده‌اند که بدون یکدیگر قابل تست یا انتشار نیستند. معیار، واحد ارزش و قابلیت review است؛ نه تعداد خط ثابت.

اتصال خودکار Git و ابزار مدیریت پروژه

Webhook می‌تواند شناسه را از نام branch، پیام commit یا عنوان PR استخراج کند. اتصال باید این رخدادها را ثبت کند:

در WKFGo می‌توان commit و pull request را به تسک وصل کرد تا گزارش تحویل از داده Git استفاده کند. توکن اتصال باید حداقل مجوز لازم داشته باشد و payload webhook اعتبارسنجی شود.

استثناهای لازم

تغییر اضطراری: شاخه hotfix با incident و بازبینی پس از رخداد؛ bypass بی‌ردپا مجاز نیست.

کار اکتشافی: spike زمان‌دار می‌تواند branch داشته باشد، اما خروجی آن تصمیم یا prototype است و نباید بدون معیار محصول merge شود.

تغییر چند مخزن: یک شناسه تسک روی چند شاخه از مخزن‌های مختلف؛ هر درخواست ادغام مستقل و وابستگی انتشار روشن باشد.

کار گروهی: چند نفر می‌توانند روی یک branch همکاری کنند، اما force-push و مالکیت review باید قرارداد مشخص داشته باشد.

امنیت و محافظت شاخه

معیارهای سلامت جریان

هدف، merge بیشتر نیست. جریان باید تغییر کوچک، قابل آزمون و قابل بازگشت تولید کند.

اشتباهات رایج

آیا این روش با trunk-based development سازگار است؟

بله، اگر شاخه‌ها کوتاه‌عمر باشند و مرتب با trunk همگام شوند. Branch per task الزاماً به GitFlow و شاخه‌های طولانی نیاز ندارد.

شناسه تسک در branch کافی است یا commit هم لازم دارد؟

branch برای اتصال معمول کافی است، اما شناسه در PR و در بعضی تیم‌ها commit، تاریخچه را پس از حذف شاخه مقاوم‌تر می‌کند. قرارداد را بر اساس ابزار تعیین کنید.

merge یعنی تسک Done است؟

نه همیشه. ممکن است انتشار، آزمون پذیرش یا rollout باقی مانده باشد. وضعیت‌های «merge‌شده» و «تحویل‌شده» را در صورت نیاز جدا کنید.

قدم بعدی

قرارداد نام‌گذاری را روی یک مخزن و یک تیم آزمایش کنید. پس از دو هفته، شاخه‌های بی‌تسک، درخواست‌های ادغام بزرگ و زمان بازبینی را اندازه بگیرید. برای قواعد کیفیت پیش از ادغام، راهنمای استاندارد کدنویسی را ببینید.

منابع دست‌اول و روش راستی‌آزمایی

این فهرست برای بررسی بیشتر است؛ لینک‌های داخل متن، منبع ادعای مشخص همان بخش‌اند.