Future ForgeFuture ForgeFuture ForgeFuture Forge
ServicesWorkPackagesFree toolsNotesAboutContact
Start
  1. Home
  2. /Notes
Future ForgeFuture Forge

Product engineering studio — design, build, and deploy software.

Discuss your project

Contact

hello@futureforge.ir09128464105
Future ForgeFuture Forge

Product engineering studio — design, build, and deploy software.

Services

Product engineeringFull-stack engineeringEngineering auditArchitecture consultingInfrastructure and deploymentAI in the product

Explore

WorkNotesFAQPackages

Free tools

Engineering auditArchitecture advisorProject estimatorPrompt tool

Company

AboutContactPrivacyTerms of use

Discuss your project

Describe the problem and the constraints. If there is a fit, we will schedule a conversation.

Discuss your project

Contact

hello@futureforge.ir09128464105
GitHubLinkedIn

© 2026 FutureForge. All rights reserved.

HomeServicesFree toolsStart
Glossary

Branch protection: شاخهٔ اصلی را از push مستقیم حفظ کنید

قانون حفاظت شاخه برای الزام PR، review، status check و ممنوعیت force push بر اساس مستندات رسمی GitHub.

SE
Soheil Ebrahimpour

Founder & product engineer

·Sep 20, 2026·5 min read
branch protectionrequired reviewsstatus checksforce pushCODEOWNERSrulesets
تنظیمات require reviews و status checks

اگر همه بتوانند مستقیم روی main پوش کنند، code review و CI اختیاری می‌شوند. Branch protection rule روی GitHub قید می‌گذارد: آیا PR لازم است؟ چند تأیید؟ کدام وضعیت‌های CI باید سبز باشند؟ آیا force push و حذف شاخه مجاز است؟ مستندات رسمی می‌گوید با این قواعد می‌توانید گردش کار را قبل از تغییر شاخه‌های مهم اجباری کنید.

این مقاله حداقل پیکربندی معقول برای تیم کوچک تا متوسط را از روی قابلیت‌های مستندشده می‌چیند.

ریویو اجباری و چک وضعیت و ممنوعیت force push به main

پاسخ کوتاه

برای main یا شاخهٔ پیش‌فرض: force push و حذف را بسته نگه دارید، Require a pull request before merging را روشن کنید، حداقل یک review بخواهید، و status checkهای CI را required کنید. در صورت امکان مانع bypass همیشگی ادمین شوید تا میان‌بر فرهنگ را نشکند. الگوهای نام مثل release/* را در صورت نیاز جداگانه محافظت کنید.

حفاظت شاخه جایگزین فرهنگ review نیست؛ آن را قابل‌اجرا می‌کند.

پیش‌فرض‌های مهم

طبق Docs، هر قاعدهٔ حفاظت به‌صورت پیش‌فرض force push به شاخه‌های منطبق را غیرفعال و حذف آن‌ها را ممنوع می‌کند. می‌توانید اختیاری این‌ها را شل کنید — معمولاً نباید. همچنین به‌طور پیش‌فرض ادمین‌ها می‌توانند bypass کنند مگر صریحاً منع شوند.

تنظیمات پرکاربرد

تنظیماثر
Require pull request reviewsادغام فقط پس از تأییدهای لازم
Dismiss stale approvalsبا تغییر diff، تأیید قبلی باطل می‌شود
Require review from Code Ownersمالک کد در CODEOWNERS باید تأیید کند
Require status checksCI یا وضعیت خارجی باید در حالت مجاز باشد
Require branches to be up to dateحالت strict؛ هم‌ترازی با پایه
Require conversation resolutionنظرات PR باید resolve شوند
Require linear historyفقط squash یا rebase merge
Require signed commitsفقط commit با امضای تأییدشده
Restrict who can pushمحدود کردن افراد یا تیم یا اپ
Lock branchفقط‌خواندنی کردن شاخه

پیکربندی پیشنهادی شروع

  1. Settings سپس Branches سپس Add branch protection rule.
  2. Pattern را main بگذارید.
  3. Require a pull request before merging و حداقل یک approval.
  4. Require status checks و انتخاب job پایدار CI.
  5. در تیم‌های منضبط، bypass ادمین را محدود کنید.
  6. Allow force pushes را خاموش بگذارید.

نام check باید با نام job گردش‌کار یکی و یکتا باشد؛ Docs دربارهٔ ابهام نام تکراری هشدار می‌دهد.

Code Owners

text

# .github/CODEOWNERS /app/billing/ @acme/billing-team *.tf @acme/platform

با الزام تأیید مالک، تغییرات حساس بدون چشم متخصص ادغام نمی‌شوند. مالک باید دسترسی نوشتن داشته باشد تا تأییدی‌اش معتبر باشد.

Strict در برابر loose برای status checks

در حالت strict شاخه باید قبل از merge با پایه به‌روز باشد؛ بیلدهای بیشتر ولی ادغام امن‌تر. loose کمتر منتظر می‌ماند ولی احتمال شکستن بعد از merge بالاتر است. برای main شلوغ، merge queue در مستندات به‌عنوان گزینهٔ مقیاس مطرح شده است.

Rulesets در برابر branch protection کلاسیک

Docs اشاره می‌کند در یک زمان فقط یک branch protection rule کلاسیک روی یک شاخه اعمال می‌شود و تشخیص قاعدهٔ برنده سخت می‌شود؛ rulesets این محدودیت را ندارند و مسیر مهاجرت وجود دارد. اگر سازمان rulesets را استاندارد کرده، همان را دنبال کنید.

استثناها و عملیات اضطراری

گاهی hotfix فوری وسوسهٔ خاموش کردن موقت حفاظت است. بهتر است مسیر اضطراری از پیش تعریف شود: چه کسی bypass مجاز است، چگونه ثبت می‌شود، و چه زمانی rule برمی‌گردد. خاموشی بی‌سند یعنی فردا همه‌چیز مستقیم به main می‌رود.

ارتباط با امنیت و تاریخچه

وقتی برای پاک‌سازی دادهٔ حساس نیاز به force push دارید، حفاظت force push مانع می‌شود و باید آگاهانه و موقت شل شود — همان نکته‌ای که Docs در راهنمای حذف دادهٔ حساس می‌گوید. این استثنا را با runbook امنیتی یکی کنید.

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

  • Required check با نامی که دیگر در گردش‌کار نیست؛ همهٔ PRها قفل می‌شوند.
  • اجازهٔ همیشگی bypass ادمین و دور زدن فرهنگ.
  • فقط حفاظت main و فراموش شاخه‌های release.
  • الزام review بدون حضور واقعی reviewer.
  • روشن کردن signed commits بدون آماده‌سازی امضا برای همه.

خلاصه

Branch protection قرارداد اجرایی کیفیت روی شاخه‌های حیاتی است: PR، review، CI، و بستن force push. حداقل را زود روشن کنید، نام checkها را پایدار نگه دارید، و استثناهای اضطراری را مستند کنید.

سوالات متداول

روی مخزن شخصی Free هم می‌شود؟

بسیاری قابلیت‌ها در طرح‌ها فرق دارند؛ قبل از وعده به تیم، تنظیمات همان مخزن و Docs طرح را ببینید.

چرا PR تأیید شده ولی merge نمی‌شود؟

checkها، به‌روز نبودن شاخه، گفت‌وگوی resolveنشده، یا رد شدن توسط reviewer دیگر را بررسی کنید.

آیا protection جلوی commit محلی بد را می‌گیرد؟

خیر؛ جلوی رسیدن بی‌ضابطه به شاخهٔ محافظت‌شده روی GitHub را می‌گیرد.

منابع و مراجع

  • GitHub Docs — About protected branches: https://docs.github.com/en/repositories/configuring-branches-and-merges-in-your-repository/managing-protected-branches/about-protected-branches
  • GitHub Docs — Managing a branch protection rule: https://docs.github.com/en/repositories/configuring-branches-and-merges-in-your-repository/managing-protected-branches/managing-a-branch-protection-rule
  • GitHub Docs — About code owners: https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners
  • GitHub Docs — About rulesets: https://docs.github.com/en/repositories/configuring-branches-and-merges-in-your-repository/managing-rulesets/about-rulesets

Author

SE

Soheil Ebrahimpour is the founder of FutureForge. He works on product design, architecture, and getting custom software into production.

Related notes

Related notes

Categories

Related services

From note to project

If this topic is close to your product or system, we can talk about the real scope.

If you are unsure about architecture or the build path, we can talk about the project.

Describe the problem and the constraints. If there is a fit, we will schedule a conversation.

Soheil Ebrahimpour
Notes
Monolith در برابر Microservices: کدام را انتخاب کنیم؟
Logging چیست؟ ثبت رویداد برای تشخیص و پاسخ به حادثه
Empty State، Error State و Loading State چیست؟
UX مهم‌تر است یا UI؟
چرا متن بد می‌تواند حتی یک UI زیبا را خراب کند؟

Software architecture

Monolith در برابر Microservices: کدام را انتخاب کنیم؟

Sep 20, 2026

Operations

Logging چیست؟ ثبت رویداد برای تشخیص و پاسخ به حادثه

Sep 20, 2026

Product engineering

Empty State، Error State و Loading State چیست؟

Sep 20, 2026

Product engineering

UX مهم‌تر است یا UI؟

Sep 20, 2026

Product engineering

چرا متن بد می‌تواند حتی یک UI زیبا را خراب کند؟

Sep 20, 2026
All notes219
Software architecture13
Glossary37
Operations87
Product engineering74
Web guide8
Product engineering
Full-stack engineering
Engineering audit
Architecture consulting
Infrastructure and deployment
Discuss your project
Free tools
Discuss your project