Технологии04.08.2026, 20:003 мин чтенияNEWS

GitHub: как разбить огромный AI-сгенерированный pull request на стек управляемых PR

Инженеры GitHub показали, как с помощью stacked pull requests и gh-stack CLI превратить один гигантский дифф в цепочку небольших ревьюируемых изменений.

Схема стека pull request на GitHub
КРАТКО

Что нужно знать

  • GitHub предлагает использовать stacked pull requests для декомпозиции больших AI-сгенерированных изменений.
  • Вместо одного PR на 1000+ строк создаётся стек из нескольких небольших PR, каждый из которых ревьюится отдельно.
  • Для работы со стеком используется CLI-расширение gh-stack и нативная поддержка в GitHub UI.
  • При изменении нижнего слоя стек расходится, и для его обновления рекомендуется использовать локальный rebase через gh stack rebase.
ИсточникGitHub Blog ↗

GitHub Blog опубликовал практическое руководство, в котором инженеры компании предлагают решить проблему огромных и нечитаемых pull request, создаваемых AI-агентами, с помощью механизма stacked pull requests. Вместо одного диффа на тысячу строк авторы советуют разбивать задачу на несколько небольших PR, выстроенных в стек, где каждый следующий зависит от предыдущего. Это упрощает ревью, ускоряет мерж и снижает риск конфликтов.

Проблема: один гигантский PR от AI-агента

По данным GitHub, AI-агенты становятся всё более продуктивными: аналитики Gartner прогнозируют, что к 2028 году они обеспечат 50% прирост производительности на всех этапах разработки ПО. Однако, как отмечают авторы, агенты по умолчанию генерируют код так, как это делалось годами, — одним большим PR. В статье приводится пример: добавление поиска по товарам в shopping assistant приводит к появлению PR на 1721 строку, включающего новую модель данных, API-роут, клиентскую часть и UI. Такой PR сложно ревьюить, ревьюеры теряют контекст, а мерж затягивается.

Решение: stacked pull requests

GitHub предлагает использовать stacked pull requests — подход, при котором фича разбивается на логические слои, каждый из которых оформляется отдельным PR. Эти PR выстраиваются в стек, где каждый следующий базируется на предыдущем. Это позволяет ревьюить изменения небольшими порциями, привлекать разных специалистов для разных слоёв и упрощает поддержку.

Практический пример: четыре слоя

В статье разобран пример добавления поиска по товарам. Авторы выделяют четыре слоя:

  • L1 (feat/catalog-data) — типизированный каталог с данными, валидацией и модулем доступа к данным;
  • L2 (feat/search-api) — валидированный эндпоинт /api/products/search;
  • L3 (feat/chat-grounding) — интеграция чата с API и ответы на основе реальных данных;
  • L4 (feat/grounded-ui) — UI с карточками товаров и состояниями.

Каждый слой зависит от предыдущего, что позволяет ревьюить их по отдельности. Например, данные ревьюит data owner, а UX — UI owner.

Инструменты: gh-stack CLI и GitHub UI

GitHub предоставляет нативную поддержку stacked pull requests в интерфейсе, а также CLI-расширение gh-stack. Для установки расширения и обучения агентов работе со стеком используются команды:

gh extension install github/gh-stack
gh skill install github/gh-stack
# или
npx skills add github/gh-stack

В примере используются кастомные агенты: data modeler, backend и frontend. Каждый агент работает над своим слоем, следуя строгой дисциплине скоупа.

Работа со стеком: от создания до ревью

Процесс начинается с инициализации стека: агент создаёт ветку feat/catalog-data с базой main с помощью gh init stack. Затем добавляются следующие слои через gh stack add. После завершения работы ветки пушатся командой gh stack push, а PR создаются через gh stack submit.

В GitHub UI на каждом PR отображается stack map — навигация между PR в стеке. Ревьюер читает PR сверху вниз для контекста, а ревьюит снизу вверх, начиная с базового слоя.

Обновление стека: rebase и sync

Если в нижний PR вносятся изменения, стек расходится. GitHub помечает ветки как diverged и блокирует мерж. Для решения проблемы есть кнопка Rebase stack в UI, но она запускает rebase на серверах GitHub, что сбрасывает коммиттера и ломает подпись коммитов. Безопаснее использовать локальную команду gh stack rebase, которая выполняет каскадный rebase с вашим Git-конфигом, а затем gh stack push. Для синхронизации всего стека используется gh stack sync.

Что это значит

Подход GitHub к stacked pull requests даёт практический способ управлять растущим объёмом AI-генерируемого кода. Вместо того чтобы бороться с гигантскими PR, команды могут структурировать работу так, чтобы каждый слой был небольшим и ревьюируемым. Это не отменяет необходимости вдумчивого ревью, но делает процесс более управляемым.

ВОПРОСЫ И ОТВЕТЫ

Коротко о главном

Что такое stacked pull requests?

Stacked pull requests — это подход, при котором фича разбивается на несколько небольших PR, выстроенных в стек, где каждый следующий зависит от предыдущего.

Как установить gh-stack?

Для установки CLI-расширения gh-stack выполните команду: gh extension install github/gh-stack.

Как обучить AI-агента работе со стеком?

Для обучения агента используется команда: gh skill install github/gh-stack или npx skills add github/gh-stack.

Что делать, если ветки в стеке разошлись?

GitHub блокирует мерж и предлагает кнопку Rebase stack, но безопаснее использовать локальную команду gh stack rebase, а затем gh stack push.

Как подготовлен материал

Черновик был создан с помощью AI по указанному первоисточнику и опубликован в формате ITBlogs. Факты следует сверять с оригинальной публикацией.

С
АВТОР

Сергей

Администратор проекта

DISCUSSION

Комментарии · 0

Войдите, чтобы участвовать в обсуждении.