Pull Request یعنی درخواست ادغام شاخهٔ تو در شاخهٔ هدف (معمولاً main). قبل از Merge، دیگران diff را میبینند، نظر میدهند و CI باید سبز باشد.
🎯 اهداف یادگیری
- PR را با
ghو از VS Code باز کنی - Draft، Checks و reviewers را درست به کار ببری
- استراتژی merge را آگاهانه انتخاب کنی
- PR بزرگ را بشکنی
شکل ۱۴ — Conversation، Files، Checks سبز، Able to merge.
📬 باز کردن PR
git push -u origin HEAD gh pr create --draft --fill --reviewer teammate gh pr view --web gh pr ready # از draft خارج شو
- بعد از Push، نوار آبی Create Pull Request
- یا Activity Bar → آیکون GitHub → Create Pull Request
- Draft را تیک بزن، Reviewer انتخاب کن
- Checkout روی PR دیگران برای تست محلی
- Files Changed → کامنت اینلاین → Submit Review
- Merge از همان پنل (Squash/Merge/Rebase طبق تنظیم تیم)
git push -u origin HEAD
gh pr create --draft --fill
gh pr checkout 42
gh pr merge 42 --squash
بدنهٔ خوب:
- چرا این تغییر لازم است (لینک Issue)
- چه عوض شد — در سطح محصول نه خطبهخط
- چگونه تست شد
- اسکرین شات اگر UI است
- ریسک و rollback
هدف: زیر ۴۰۰ خط منطقی. اگر بزرگ است، stacked PR یا چند PR متوالی. ریویوکننده خسته Approve دروغین میزند.
🧪 Checks
هر Push روی شاخهٔ PR، Actions را آتش میزند (فصل ۲۸). مربع سبز Able to merge یعنی:
- تعارض با base نیست
- بررسیهای required پاس شده
- تعداد Approve کافی است
- conversationها resolve شدهاند (اگر اجباری باشد)
در VS Code تب Checks همان وضعیت را نشان میدهد.
🔀 سه دکمهٔ Merge
| روش | تاریخچهٔ main | مناسب |
|---|---|---|
| Merge commit | گره دووالدی | حفظ PR بهعنوان واحد |
| Squash | یک کامیت | شاخهٔ شلوغ / WIP زیاد |
| Rebase and merge | خطی بدون گره merge | تیم متعهد به کامیت تمیز |
تیم باید یکی را قفل کند تا git log یکشکل بماند.
🧹 قبل از Review
git fetch origin git rebase origin/main # روی شاخهٔ شخصی git push --force-with-lease
تعارض را تو حل کن نه ریویوکننده.
حتی در پروژهٔ شخصی Actions را روشن کن. حافظه عضلهای Production از همینجا ساخته میشود.
Junior — Draft یعنی چه؟ PR قابل merge نیست تا Ready شود؛ سیگنال «نگاه نکن هنوز».
Mid — چرا force-with-lease بعد از rebase؟ چون rebase هش عوض میکند؛ lease جلوی پاک کردن کار همکار روی همان شاخه را میگیرد.
Senior — stacked PR؟ زنجیرهٔ PR که هر کدام روی قبلی است؛ نیازمند ابزار (Graphite یا gh) و توافق تیم.
✅ چکلیست فهم
- PR را با
--draftباز میکنی - چرا را در بدنه مینویسی نه فقط چه
- Checks را قبل از درخواست ریویو سبز میکنی
- استراتژی merge تیم را میدانی
فصل بعد: فرهنگ Code Review.