Защита ветки main на GitHub

Содержание
Введение
Ruleset: запрет прямых коммитов в main
Bypass: кому разрешить обход проверок
Классика: Branch protection rule
Проверка
Другие статьи про Git

Введение

По умолчанию любой участник репозитория с правом записи может сделать push напрямую в main — один неверный коммит, и прод лежит. Защита ветки решает это на стороне сервера: GitHub отклоняет прямые пуши, а изменения попадают в main только через pull request с проверками. Исключения для automation и дежурных настраиваются через bypass — ниже оба механизма. (English version.)

Автор: Артур Исаев

Ruleset: запрет прямых коммитов в main

Актуальный механизм — rulesets (репозиторий или организация):

1. Откройте Settings репозитория → Rules → Rulesets → New ruleset → New branch ruleset.
2. Дайте имя (например protect-main), Enforcement status поставьте Active.
3. В Target branches добавьте Include default branch (покрывает main, даже если его переименуют) или явный шаблон main.
4. Включите правила:

Restrict deletions
Require a pull request before merging
Require status checks to pass
Block force pushes

У Require a pull request before merging задайте минимум (например 1 approval), при желании — Dismiss stale pull request approvals и Require conversation resolution.

5. Нажмите Create. С этого момента git push origin main отклоняется сервером, а merge кнопки в pull request требует выполнения правил.

Bypass: кому разрешить обход проверок

Полный запрет неудобен для automation (deploy-боты, release-please) и дежурных на пожаре. В том же ruleset есть секция Bypass list → Add bypass: выберите актора — роль (Repository admin, Maintain, Write), команду, deploy key или приложение — и режим:

Always — актор обходит все правила ruleset
Pull request — актор обходит только требование pull request

Практика: ботам — Always (им некому аппрувить), живым людям — максимум Pull request, и только тем, кто реально тушит пожары. Bypass виден в истории правил, поэтому злоупотребления находятся за минуту. Права на редактирование самого ruleset остаются у администраторов — bypass не даёт менять правила.

Классика: Branch protection rule

Старый механизм (Settings → Branches → Add classic branch protection rule, шаблон main) делает то же самое для одной ветки: Require a pull request before merging + Allow specified actors to bypass required pull requests — список людей и приложений, которым разрешён прямой пуш. Если rulesets уже настроены, классика не нужна: два механизма поверх друг друга только путают.

Проверка

Обычный участник после настройки получает отказ:

$ git push origin main

remote: error: GH006: Protected branch update failed
remote: error: Changes must be made through a pull request.
To https://github.com/USER/REPO.git
! [remote rejected] main -> main (protected branch hook declined)

Актор из bypass list пушит как раньше. Документация GitHub: about protected branches, about rulesets.

Article author: Andrei Olegovich

Похожие статьи
Git remote
Git
GitHub
Защита ветки main
Actions
Переход с https аутентификации на ssh
GitLab

Search this site

Subscribe to Telegram channel @aofeed to follow new articles and updates to old ones

Go to channel

@aofeed

Ask a question in the Telegram group

@aofeedchat

Contacts and cooperation:
I recommend our hosting beget.ru
Write to info@urn.su, info@aredel.com if you:
1. Want to write an article for our site or translate an article into your native language.
2. Want to place thematically relevant ads on the site.
3. Ads on my site pass maximum censorship. If you see an ad block unsuitable for school-age children, shocking or misleading - please contact us by e-mail
4. Found a mistake, inaccuracy, bug, etc. on the site. ... .......
5. Articles can be shared on social media by clicking a network icon: