Git 2026

فصل ۱۷ · Pull Request

Pull Request — دروازهٔ کیفیت تیم

Pull Request یعنی درخواست ادغام شاخهٔ تو در شاخهٔ هدف (معمولاً main). قبل از Merge، دیگران diff را می‌بینند، نظر می‌دهند و CI باید سبز باشد.

🎯 اهداف یادگیری

  • PR را با gh و از VS Code باز کنی
  • Draft، Checks و reviewers را درست به کار ببری
  • استراتژی merge را آگاهانه انتخاب کنی
  • PR بزرگ را بشکنی
صفحهٔ Pull Request در GitHub

شکل ۱۴ — 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 خارج شو
🖥️ افزونه GitHub Pull Requests
  1. بعد از Push، نوار آبی Create Pull Request
  2. یا Activity Bar → آیکون GitHub → Create Pull Request
  3. Draft را تیک بزن، Reviewer انتخاب کن
  4. Checkout روی PR دیگران برای تست محلی
  5. Files Changed → کامنت اینلاین → Submit Review
  6. Merge از همان پنل (Squash/Merge/Rebase طبق تنظیم تیم)
⌨️ Terminal + gh

git push -u origin HEAD gh pr create --draft --fill gh pr checkout 42 gh pr merge 42 --squash

بدنهٔ خوب:

  1. چرا این تغییر لازم است (لینک Issue)
  2. چه عوض شد — در سطح محصول نه خط‌به‌خط
  3. چگونه تست شد
  4. اسکرین شات اگر UI است
  5. ریسک و 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

تعارض را تو حل کن نه ریویوکننده.

PR به main مستقیم از لپ‌تاپ بدون CI

حتی در پروژهٔ شخصی 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.

فصل ۱۷ از ۳۶ · مرجع جامع و حرفه‌ای Git و GitHub · ویرایش 1.0.0