GitHub Stacked PRs CLI
Расширение GitHub CLI gh stack и скилл для агента: цепочка зависимых веток и PR, перебазирование, отправка и слияние всего стека целиком
- 1 712 ★ репозитория
- Последний коммит
- MIT
Широкий доступ
Почему такой уровень
- Команды отправляют ветки на GitHub, открывают PR и сливают их вместе со всеми неслитыми ниже
- Перебазирование переписывает историю локальных веток, а `sync --prune` удаляет локальные ветки слитых PR
- `gh stack unstack` снимает стек на GitHub, а работа идет через вашу авторизацию GitHub CLI
Установка
- Работает в
Ручная установка
gh extension install github/gh-stackНужен GitHub CLI версии 2.0 или новее и Git 2.36 или новее. Обновление: `gh extension upgrade stack`.
Доступ и проверки
Как мы проверяемШирокий доступИнструмент может менять данные, выполнять команды или работать с секретами.
- Команды отправляют ветки на GitHub, открывают PR и сливают их вместе со всеми неслитыми ниже
- Перебазирование переписывает историю локальных веток, а `sync --prune` удаляет локальные ветки слитых PR
- `gh stack unstack` снимает стек на GitHub, а работа идет через вашу авторизацию GitHub CLI
Это чужой код. Посмотрите файлы в репозитории перед установкой.
Что делает
GitHub Stacked PRs — официальное расширение GitHub CLI для стеков: упорядоченной цепочки веток, где каждая ветка строится на предыдущей и получает свой пулреквест. База каждого PR выставляется на ветку ниже, поэтому рецензент видит только дифф своего слоя. Нижняя ветка опирается на основную (trunk), и сливается первой. Команда `gh stack init` создает стек, `gh stack add` добавляет ветку сверху, `gh stack push` отправляет все ветки, `gh stack submit` открывает PR и связывает их в стек на GitHub. Команды `up`, `down`, `top` и `bottom` ходят по слоям. `rebase` перебазирует ветки друг на друга, `sync` забирает изменения, сверяет стек с GitHub, перебазирует и отправляет, `merge` сливает PR и все неслитые ниже, `unstack` разбирает стек. Метаданные хранятся локально в файле `gh-stack` внутри каталога git, слои могут жить в разных рабочих деревьях. Скилл gh-stack учит агента работать с этими командами без интерактивных окон: вместо голых команд он вызывает `gh stack view --json`, `gh stack submit --auto`, `gh stack merge <цель> --yes`, а при выходе с кодом 3 ведет через разрешение конфликтов перебазирования. Отдельные справочные файлы объясняют, как делить работу на слои, и разбирают сбои.
Для кого. Для разработчиков на GitHub, которые режут крупные изменения на цепочку небольших PR, и для агентов, которым поручают такую работу в репозитории.
Подходит, если
- Задачу из трех частей (авторизация, API, интерфейс) нужно разложить на зависимые PR, которые можно смотреть по отдельности
- Нижний PR поправили по замечаниям, и все ветки выше надо перебазировать одной командой
- Весь стек или его часть нужно слить одной командой, не вручную в нужном порядке
- Агент должен сам вести стек из консоли и не зависать на запросах и полноэкранных окнах
- Нужно посмотреть состояние стека в JSON: какая ветка слита, где нужна перебазировка
Не подходит, если
- Репозиторий хостится вне GitHub: расширение работает через API GitHub
- Нужно несколько параллельных ответвлений от одной ветки: стек строго линейный, у ветки один родитель и не больше одного потомка
- Версия Git ниже 2.36 или нет установленного и авторизованного GitHub CLI
- Состав стека нужно менять без терминала в диалоговом режиме: команда `modify` работает только в полноэкранном окне, для скрипта остается `unstack` и повторный `init`
- Нужна оболочка над `gh` с компактным выводом для агентов: в каталоге есть gh-axi
Пример запроса к агенту
Разбей эту задачу на три слоя: миграция базы, API и интерфейс. Заведи стек, отправь его на GitHub черновиками и покажи состояние в JSONОграничения
Нужны GitHub CLI версии 2.0 или новее и Git 2.36 или новее. Если у репозитория несколько удаленных адресов, перед `push`, `submit`, `sync` и `rebase` задайте `remote.pushDefault` или передавайте `--remote`.
Без ключей `--json`, `--auto` и `--yes` часть команд открывает запросы или полноэкранное окно и в оболочке агента виснет. Окно `gh stack modify` запускается только вручную.
Стек может включать до 100 PR. Если стеки на репозитории не включены, команды возвращают код 9. Порядок действий после слияния через сжатие (squash) описан в справочнике по сбоям.
Заголовки и описания PR создаются автоматически, правят их потом через `gh pr edit`. Расширение проверяет наличие новой версии и раз в сутки пишет об этом в stderr, отключается переменной `GH_STACK_NO_UPDATE_NOTIFIER=1`.
Метаданные стека лежат в `.git/gh-stack`: не смешивайте старые и новые версии расширения в одном клоне.
Как отключить. Выполните `gh extension remove stack` и удалите папку скилла gh-stack из каталога скиллов агента. Файл `gh-stack` в каталоге git можно удалить вручную, он не входит в репозиторий. Стеки на GitHub снимает команда `gh stack unstack`.
Частые вопросы
Чем стек отличается от обычного PR?
Каждый PR в стеке остается обычным пулреквестом, а его база — ветка PR ниже, основная ветка в этой роли не выступает. GitHub знает о связи между ними, а рецензент видит только дифф своего слоя.
Сколько PR может быть в стеке?
Не больше 100. Если работа требует больше, ее делят на несколько стеков.
Где расширение хранит данные о стеке?
Локально в файле `gh-stack` внутри общего каталога git, по умолчанию это `.git/gh-stack`. Файл не коммитится, его делят все связанные рабочие деревья клона.
Как слить стек?
Командой `gh stack merge` с номером PR или стека. С номером PR сливается он и все неслитые ниже, с номером стека весь стек. Операция выполняется целиком или не выполняется вовсе. Если в базовой ветке включена очередь слияния, стек встает в очередь, и способ слияния выбирает она.
Почему в скилле нельзя запускать голую команду `gh stack view`?
Команды определяют, подключен ли вывод к терминалу. В псевдотерминале агента `view` открывает полноэкранное окно и блокируется, поэтому скилл требует `gh stack view --json`, а для отправки `gh stack submit --auto`.
Что делать при конфликте после перебазирования?
Код выхода 3. После `gh stack rebase` разрешите конфликт, выполните `git add` и `gh stack rebase --continue`, либо откатитесь через `--abort`. После `sync` стек уже восстановлен: повторите `gh stack rebase`, чтобы воспроизвести конфликт.
Обсуждение
Вопросов и отзывов пока нет.
Похожие
CLI-инструментыСкиллы GitHub CLI
GitHub CLI skills (gh, gh-skill)
Официальные скиллы GitHub CLI: как агенту правильно вызывать gh и как управлять скиллами командой gh skill
Расширение GitHub CLI и скилл для агентов: загружает скриншоты, PDF, архивы и логи в задачи и запросы на слияние из терминала и возвращает готовую ссылку
Набор скиллов Гэрри Тана, превращающий Claude Code в виртуальную команду: продукт, архитектура, дизайн, ревью, QA и выпуск
Goal Workflow
goal-workflow
19 скиллов для Claude Code: PRD, спецификация, задачи в GitHub Issues, пакетная реализация с ревью и слияние pull request, плюс рефакторинг и диаграммы
CLI открывает локальный git diff в браузере как просмотр правок в пулл-реквесте GitHub; комментарии копируются промптом для агента
Плагин для Claude Code: 39 команд для PR, ревью, коммитов и спецификаций, девять ролей экспертов и хуки, восемь языковых версий
Коротко о README
Описание проекта начинается с установки, обновления и подробного объяснения уведомлений о новых версиях. Затем идут раздел об интеграции с агентами, быстрый старт из пяти команд, схема стека с нижним и верхним слоем, локальное хранение метаданных и работа с рабочими деревьями git. Большую часть занимает справочник по командам с таблицами ключей и примерами. В репозитории есть документация на Astro со скриншотами интерфейса GitHub, справочник по API, правила участия и тесты на Go.
Бейдж для README
Исходный SKILL.md
--- name: gh-stack description: > Manages stacked PRs and splits multi-part work into reviewable branches with gh-stack. Use for stack creation, viewing, edits, push, submit, sync, rebase, merge, or checkout; when asked to split or isolate work for review; whenever a user mentions a stack, branch layers, dependent PRs, or gh stack; or when a stack is checked out. metadata: author: github version: "0.2.0" --- # gh-stack `gh stack` is a [GitHub CLI](https://cli.github.com/) extension for stacked branches and pull requests. A stack is an ordered chain of branches rooted on a trunk, where each branch has one PR based on the branch below it, so a reviewer sees only that layer's diff. `gh stack` prints a stack trunk-first, left to right: ``` (main) <- auth <- api <- frontend ``` Left is the **bottom**, right is the **top**. `auth` is based on `main` and merges first; `frontend` merges last. `up` moves toward the top, away from trunk; `down` moves toward it. Foundational work belongs at the bottom, code that depends on it above. For how to choose the layers, read `references/stack-design.md`. ## Setup Requires Git 2.36+ and an authenticated GitHub CLI. ```bash gh extension install github/gh-stack git config rerere.enabled true # remember conflict resolutions git config remote.pushDefault origin # required if the repo has more than one remote ``` ## Non-interactive use `gh stack` branches on whether **stdout is a TTY**. Piped, most commands error cleanly or print static text; under a PTY the same commands open a prompt or a full-screen TUI and block forever. Agent harnesses differ, so always pass the flags below instead of relying on that detection.