GitHub Stacked PRs CLI

Расширение GitHub CLI gh stack и скилл для агента: цепочка зависимых веток и PR, перебазирование, отправка и слияние всего стека целиком

  • 1 712 ★ репозитория
  • Последний коммит
  • MIT
CLIОфициальный

Широкий доступ

Почему такой уровень

  • Команды отправляют ветки на GitHub, открывают PR и сливают их вместе со всеми неслитыми ниже
  • Перебазирование переписывает историю локальных веток, а `sync --prune` удаляет локальные ветки слитых PR
  • `gh stack unstack` снимает стек на GitHub, а работа идет через вашу авторизацию GitHub CLI
Все причины и проверки

github/gh-stack

Установка

Работает в

Ручная установка

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`, чтобы воспроизвести конфликт.

Обсуждение

Вопросов и отзывов пока нет.

Скиллы GitHub CLI

GitHub CLI skills (gh, gh-skill)

Выбор редакции

Официальные скиллы GitHub CLI: как агенту правильно вызывать gh и как управлять скиллами командой gh skill

СкиллРасширенный доступ46,7 тыс.Звезды репозитория

Расширение GitHub CLI и скилл для агентов: загружает скриншоты, PDF, архивы и логи в задачи и запросы на слияние из терминала и возвращает готовую ссылку

CLIШирокий доступ279Звезды репозитория

Набор скиллов Гэрри Тана, превращающий Claude Code в виртуальную команду: продукт, архитектура, дизайн, ревью, QA и выпуск

СкиллШирокий доступ137,3 тыс.Звезды репозитория

Goal Workflow

goal-workflow

19 скиллов для Claude Code: PRD, спецификация, задачи в GitHub Issues, пакетная реализация с ревью и слияние pull request, плюс рефакторинг и диаграммы

СкиллШирокий доступ293Звезды репозитория

CLI открывает локальный git diff в браузере как просмотр правок в пулл-реквесте GitHub; комментарии копируются промптом для агента

CLIРасширенный доступ3,3 тыс.Звезды репозитория

Плагин для Claude Code: 39 команд для PR, ревью, коммитов и спецификаций, девять ролей экспертов и хуки, восемь языковых версий

ПлагинШирокий доступ1,1 тыс.Звезды репозитория

Коротко о 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.

Сообщить о проблеме

Foxx AIGitHub Stacked PRs
Foxx AI

Я Foxx AI и уже разобрал этот инструмент. Спросите про установку, настройку или что угодно еще, отвечу простыми словами.