# Auto-merge для PR _Совместная работа · GitLab Knowledge Base_ **TL;DR:** Режим, в котором PR сольётся автоматически как только пройдут все required reviews и checks. Включается через `gh pr merge --auto` или кнопку «Enable auto-merge» в UI. Освобождает от ручного клика по «merge» после получения approve и зелёного CI. Auto-merge - функция GitHub, при которой PR помечается «слить, когда все условия выполнены». Полезно, когда: - Ты получил review с правками, ответил пушем, и теперь ждёшь зелёного CI. Вместо ожидания у компьютера ставишь auto-merge и идёшь делать другую задачу. - У тебя open PR на котором нужен approve от занятого reviewer'а. Включаешь auto-merge, когда reviewer apprоve'ит - PR сольётся автоматически. ## Включение Через CLI: ```bash gh pr merge 123 --auto --squash --delete-branch ``` Флаги стратегии (`--squash`, `--rebase`, `--merge`) обязательны: auto-merge должен знать, какой стратегией сливать. Через UI: на странице PR кнопка «Enable auto-merge» (рядом с обычной merge-кнопкой). Появляется dropdown стратегии, выбираешь. ## Условия слияния Auto-merge срабатывает, когда **все** выполнены: - Required reviews получены (если в [branch-protection](/courses/git/kb/branch-protection.md) стоит «Require approvals»). - Required status checks зелёные (если стоит «Require status checks to pass»). - Если стоит «Require branches to be up to date» -ветка обновлена относительно target'а. - Все conversation resolved (если стоит «Require conversation resolution»). - Для CODEOWNERS-paths получен approve от owner'а (если стоит «Require review from Code Owners»). Если хоть одно условие не выполнено, auto-merge ждёт. ## Отмена Auto-merge можно снять: ```bash gh pr merge 123 --disable-auto ``` Или кнопка «Disable auto-merge» в UI. Также auto-merge **автоматически отменяется**, если: - Кто-то поставил Request Changes review. - Кто-то запушил force-push на ветку PR (теряется approve). - Required check failed. ## Подводные камни - **Auto-merge должен быть включён в Settings репо.** Settings -> General -> Pull Requests -> «Allow auto-merge». По умолчанию отключено. - **Без required conditions** auto-merge срабатывает мгновенно. Это, по сути, обычный merge. Полезно только когда есть что ждать. - **На public-репо** автору auto-merge может оказаться недоступен, если есть branch protection с required reviewers и автор не может approve самого себя. - **Auto-merge не догоняет main.** Если включено «Require branches to be up to date», и main ушёл вперёд, auto-merge не делает rebase сам. Нужно либо вручную rebase, либо включить «Automatically update branches» в Repo Settings. ## Merge queue (продвинутый случай) На больших репо с активным main одного auto-merge мало: пока ты ждёшь зелёного CI, в main приходит чужой PR, твой CI устаревает. GitHub Merge Queue решает это: PR'ы выстраиваются в очередь, GitHub собирает временную ветку `gh-readonly-queue/...` (event `merge_group`), куда добавляет коммиты PR'ов в порядке очереди поверх свежего main, прогоняет CI на этой ветке и при зелёном результате fast-forward'ит main. Каждый PR проверяется в том состоянии, в котором он реально вольётся - конфликты и регрессии, возникающие от *сочетания* PR'ов, ловятся до merge. ## Команды ```bash gh pr merge --auto --squash --delete-branch ``` Включить auto-merge для текущего PR со squash ```bash gh pr merge 123 --disable-auto ``` Отменить auto-merge на PR 123 ## См. также - [Pull Request (PR)](/courses/git/kb/pull-request.md) - [Branch protection rules](/courses/git/kb/branch-protection.md) - [Стратегии merge PR (GitHub)](/courses/git/kb/merge-strategies.md)