# Команды CLI с накоплением запросов на вытягивание

Найдите каждую команду, флаг и код выхода для gh stack расширения.GitHub CLI

> \[!NOTE] This feature is in public preview and subject to change.

Расширение `gh stack` для GitHub CLI создания стека запросов на вытягивание из локального репозитория и управления ими. Общие сведения о стеках см. в разделе [Stacked pull requests](/ru/enterprise-cloud@latest/pull-requests/reference/stacked-pull-requests).

## Installation

```shell
gh extension install github/gh-stack
```

Для расширения требуется GitHub CLI (`gh`) версия 2.0 или более поздняя.

> \[!NOTE]
> Расширение `gh stack` использует GitHub CLI проверку подлинности. Если вы еще не прошли проверку подлинности, выполните команду `gh auth login`.

## Сводка по командам

| Command                                   | Purpose                                                                                                           |
| ----------------------------------------- | ----------------------------------------------------------------------------------------------------------------- |
| [`gh stack init`](#gh-stack-init)         | Инициализация нового стека в текущем репозитории.                                                                 |
| [`gh stack add`](#gh-stack-add)           | Добавьте новую ветвь поверх текущего стека.                                                                       |
| [`gh stack view`](#gh-stack-view)         | Просмотр текущего стека.                                                                                          |
| [`gh stack checkout`](#gh-stack-checkout) | Проверьте стек по номеру стека, номеру запроса на вытягивание, URL-адресу запроса на вытягивание или имени ветви. |
| [`gh stack modify`](#gh-stack-modify)     | Интерактивно переструктурировать текущий стек.                                                                    |
| [`gh stack unstack`](#gh-stack-unstack)   | Удалите стек из локального отслеживания и разместите его.GitHub                                                   |
| [`gh stack submit`](#gh-stack-submit)     | Отправьте все ветви, а затем создайте или обновите запросы на вытягивание и стек GitHub.                          |
| [`gh stack sync`](#gh-stack-sync)         | Получение, перебазировка, отправка и синхронизация состояния запроса на вытягивание в одной команде.              |
| [`gh stack rebase`](#gh-stack-rebase)     | Извлеките из удаленного узла и выполните каскадную перебазу по стеку.                                             |
| [`gh stack push`](#gh-stack-push)         | Отправьте активные ветви в текущем стеке в удаленный.                                                             |
| [`gh stack link`](#gh-stack-link)         | Связывание запросов на вытягивание в стек GitHub без локального отслеживания.                                     |
| [`gh stack merge`](#gh-stack-merge)       | Объединение одного или нескольких запросов на вытягивание с накоплением одновременно.                             |
| [`gh stack switch`](#gh-stack-switch)     | Интерактивный переход на другую ветвь в стеке.                                                                    |
| [`gh stack up`](#gh-stack-up)             | Двигайтесь к верхней части стека, от магистрали.                                                                  |
| [`gh stack down`](#gh-stack-down)         | Двигайтесь вниз к нижней части стека, в сторону магистрали.                                                       |
| [`gh stack top`](#gh-stack-top)           | Перейдите в верхнюю часть стека.                                                                                  |
| [`gh stack bottom`](#gh-stack-bottom)     | Переход к нижней части стека.                                                                                     |
| [`gh stack trunk`](#gh-stack-trunk)       | Перейдите в магистральную ветвь.                                                                                  |
| [`gh stack alias`](#gh-stack-alias)       | Создайте короткий псевдоним команды, чтобы можно было ввести меньше.                                              |
| [`gh stack feedback`](#gh-stack-feedback) | Поделитесь отзывом о `gh stack` расширении.                                                                       |

## Управление стеком

### `gh stack init`

Инициализация нового стека в текущем репозитории.

```shell
gh stack init [flags] [branches...]
```

Инициализирует новый стек локально. В интерактивном режиме (без аргументов) командная строка для имени ветви и предлагает использовать текущую ветвь в качестве первого слоя.

При предоставлении явных имен ветвей существующие ветви применяются автоматически и создаются отсутствующие ветви. Магистраль по умолчанию используется в ветви по умолчанию репозитория, если вы не переопределите ее.`--base`

Команда включается `git rerere` автоматически, чтобы разрешения конфликтов запоминались в перебазах.

| Flag                  | Описание                                                                                 |
| --------------------- | ---------------------------------------------------------------------------------------- |
| `-b, --base <branch>` | Магистральная ветвь для стека (по умолчанию используется ветвь репозитория по умолчанию) |

**Примеры:**

```shell
# Interactive — prompts for branch names
gh stack init

# Non-interactive — specify first branch upfront
gh stack init feature-auth

# Use a different trunk branch
gh stack init --base develop feature-auth

# Adopt or create multiple branches at once
gh stack init feature-auth feature-api feature-ui
```

### `gh stack add`

Добавьте новую ветвь поверх текущего стека.

```shell
gh stack add [flags] [branch]
```

Создает новую ветвь в текущей head, добавляет ее в верхнюю часть стека и проверяет ее. Эту команду необходимо выполнить во время самой верхней ветви стека. Если имя ветви не указано, командная строка для одной из них не указана.

При необходимости можно выполнить изменения и создать фиксацию в рамках `add` потока. Если вы предоставляете `-m` без явного имени ветви, имя ветви создается автоматически в формате даты и slug, например `03-24-add_login`.

| Flag                     | Описание                                                                      |
| ------------------------ | ----------------------------------------------------------------------------- |
| `-A, --all`              | Этап всех изменений, включая незаслеченные файлы. Требует использования `-m`. |
| `-u, --update`           | Этап изменения только отслеживаемых файлов. Требует использования `-m`.       |
| `-m, --message <string>` | Создание фиксации с этим сообщением перед созданием ветви                     |

> \[!NOTE]
> `-A` и `-u` являются взаимоисключающими.

**Примеры:**

```shell
# Create a branch by name
gh stack add api-routes

# Prompt for a branch name interactively
gh stack add

# Stage all changes, commit, and auto-generate the branch name
gh stack add -Am "Add login endpoint"

# Stage only tracked files, commit, and auto-generate the branch name
gh stack add -um "Fix auth bug"

# Commit already-staged changes and auto-generate the branch name
gh stack add -m "Add user model"

# Stage all changes, commit, and use an explicit branch name
gh stack add -Am "Add tests" test-layer

# Stage only tracked files, commit, and use an explicit branch name
gh stack add -um "Update docs" docs-layer
```

### `gh stack view`

Просмотр текущего стека.

```shell
gh stack view [flags]
```

Отображает все ветви в стеке, их упорядочение, ссылки запроса на вытягивание и последнюю фиксацию с относительной меткой времени. Выходные данные передаются через пейджер, который учитывает `GIT_PAGER` или `PAGER`по умолчанию используется `less -R`.

| Flag          | Описание                                         |
| ------------- | ------------------------------------------------ |
| `-s, --short` | Компактные выходные данные (только имена ветвей) |
| `--json`      | Выходные данные стека в формате JSON             |

**Примеры:**

```shell
gh stack view
gh stack view --short
gh stack view --json
```

### `gh stack checkout`

Проверьте стек по номеру стека, номеру запроса на вытягивание, URL-адресу запроса на вытягивание или имени ветви.

```shell
gh stack checkout [<stack-number> | <pr-number> | <pr-url> | <branch>]
```

Голый номер интерпретируется сначала как стек или номер запроса на вытягивание. Это идентификаторы с областью действия репозитория, отображаемые в пользовательском интерфейсе GitHub . Если число не совпадает, он выполняется в качестве имени ветви.

При ссылке на удаленный стек команда извлекает стек GitHub, извлекает ветви и настраивает стек локально. Если стек уже существует локально и соответствует, команда переключается в ветвь. Если локальные и удаленные стеки имеют разные композиции, вам будет предложено устранить конфликт.

При указании имени ветви команда разрешает ее только для локально отслеживаемых стеков.

При выполнении команды без аргументов в интерактивном терминале открывается список средств выбора, доступных для поиска, каждый стек, отслеживаемый локально, и стеки, которые существуют только в GitHub. В каждой строке показан номер стека, его нижняя и верхняя ветвь, базовая ветвь, строка состояния, сводка о том, сколько запросов на вытягивание объединяются, открываются, закрываются или еще не отправляются, и независимо от того, доступен ли стек локально или только в удаленном режиме. Фильтрация с помощью вкладок **"Все**", **"Локальный**" и **"Удаленный** " или "Тип `/` " для поиска. Полностью объединенные стеки опущены. Выбор клонирования удаленного стека локально перед переключением на него.

**Примеры:**

```shell
# Check out a stack by its stack number
gh stack checkout 7

# Check out a stack by pull request number
gh stack checkout 42

# Check out a stack by pull request URL
gh stack checkout https://github.com/owner/repo/pull/42

# Check out a stack by branch name (local only)
gh stack checkout feature-auth

# Interactive — pick from all available stacks (local and remote)
gh stack checkout
```

### `gh stack modify`

Интерактивно переструктурировать текущий стек.

```shell
gh stack modify [flags]
```

Открывает интерактивный пользовательский интерфейс терминала для реструктуризации стека. Все изменения выполняются в интерфейсе и применяются вместе при нажатии <kbd>клавиш CTRL</kbd>+<kbd>S</kbd>. Нельзя изменять ветви из объединенных запросов на вытягивание.

| Flag         | Описание                                                                               |
| ------------ | -------------------------------------------------------------------------------------- |
| `--continue` | Продолжить после разрешения конфликтов                                                 |
| `--abort`    | Отмените сеанс изменения и восстановите стек в его состоянии перед выполнением команды |

**Предпосылки**

Перед открытием интерфейса команда проверяет следующие условия:

1. Необходимо локально извлечь активный стек.
2. Рабочее дерево должно быть чистым, без незафиксированных изменений.
3. Перебаза не выполняется.
4. Запрос на вытягивание в стеке не помещается в очередь для слияния.
5. Журнал фиксаций должен быть линейным, без фиксаций слиянием и без разных ветвей.

**Operations**

| Операция                       | Ключ                                                                                                 | Effect |
| ------------------------------ | ---------------------------------------------------------------------------------------------------- | ------ |
| Drop                           |                                                                                                      |        |
| <kbd>x</kbd>                   | Удалите ветвь и ее фиксации из стека. Сохраняется локальная ветвь и связанный запрос на вытягивание. |        |
| Свернуть вниз                  |                                                                                                      |        |
| <kbd>д</kbd>                   | Поглощает фиксации в ветвь ниже, в сторону магистрали. Свернутая ветвь удаляется из стека.           |        |
| Свернуть вверх                 |                                                                                                      |        |
| <kbd>u</kbd>                   | Поглощает фиксации в ветвь выше, от магистрали. Свернутая ветвь удаляется из стека.                  |        |
| Вставка ниже                   |                                                                                                      |        |
| <kbd>i</kbd>                   | Вставьте новую пустую ветвь под курсором в сторону магистрали.                                       |        |
| Вставка выше                   |                                                                                                      |        |
| <kbd>Я</kbd>                   | Вставьте новую пустую ветвь над курсором, вдали от магистрали.                                       |        |
| Переместить вниз               |                                                                                                      |        |
| <kbd>Shift</kbd>+<kbd>):</kbd> | Переупорядочение ветви вниз, в сторону магистрали.                                                   |        |
| Переместить вверх              |                                                                                                      |        |
| <kbd>Shift</kbd>+<kbd>^</kbd>  | Переупорядочение ветви вверх, от магистрали.                                                         |        |
| Rename                         |                                                                                                      |        |
| <kbd>r</kbd>                   | Переименуйте ветвь с помощью встроенного запроса.                                                    |        |
| Undo                           |                                                                                                      |        |
| <kbd>z</kbd>                   | Отмените последнее поэтапное действие.                                                               |        |

**Этап применения**

При нажатии <kbd>клавиш CTRL</kbd>+<kbd>S</kbd> поэтапное изменение применяется путем переименования ветвей, вставки новых ветвей, свертывания или удаления ветвей и выполнения каскадной повторной базы для создания журнала линейной фиксации с нужным состоянием стека.

Если возникает конфликт перебазы, можно:

* Устраните конфликты, разверните файлы, а затем запустите `gh stack modify --continue`.
* Выполните `gh stack modify --abort` , чтобы прервать операцию и восстановить стек до предыдущего состояния.

**После изменения**

Если вы уже создали стек запросов GitHubна вытягивание, выполните отправку `gh stack submit` обновленных ветвей и повторно создайте стек. Старый стек автоматически заменяется.

**Примеры:**

```shell
# Open the interactive modify interface
gh stack modify

# Continue after resolving a conflict
gh stack modify --continue

# Abort and restore to the previous state
gh stack modify --abort
```

### `gh stack unstack`

Удалите стек из локального отслеживания и разместите его.GitHub Эта команда также доступна как `gh stack delete`.

```shell
gh stack unstack [<stack-number>] [flags]
```

Без аргументов команда нацелена на активный стек, который является стеком, который содержит извлеченную в настоящее время ветвь. Он отменяет стек GitHub и удаляет локальное отслеживание.

Укажите номер стека, идентификатор, отображаемый в пользовательском интерфейсе GitHubстека, чтобы отменить стек. Это работает из любого места в репозитории, независимо от того, извлекается ли стек локально, так как стек не взломан непосредственно через GitHub API. Если стек также доступен локально, его локальное отслеживание также удаляется.

Запросы на вытягивание, объединенные, объединения или очереди для слияния не могут быть удалены из стека и остаться частью стека GitHub . При удалении каждого запроса на вытягивание стек растворяется и удаляется любое локальное отслеживание. Если некоторые запросы на вытягивание остаются в стеке, стек сохраняется и локальное отслеживание( если таковые есть) не изменяется. Используйте `--local` для пропуска удаленной операции и удаления только локального отслеживания.

Эта команда полезна при необходимости реструктурировать стек, удалив ветвь, вставляя ветвь, переупорядочение ветвей, переименование ветвей или внесение других крупных изменений. После отмены кэширования используйте `gh stack init` для повторного создания стека с нужной структурой. Существующие ветви принимаются автоматически.

| Flag      | Описание                                                              |
| --------- | --------------------------------------------------------------------- |
| `--local` | Удалите только стек локально, сохраняя его в локальном режиме. GitHub |

**Примеры:**

```shell
# Unstack the current stack on GitHub and remove local tracking
gh stack unstack

# Unstack a specific stack by its number
gh stack unstack 7

# Only remove local tracking
gh stack unstack --local
```

## Удаленные операции

### `gh stack submit`

Отправьте все ветви, а затем создайте или обновите запросы на вытягивание и стек GitHub.

```shell
gh stack submit [flags]
```

Создает запрос на вытягивание для каждой ветви в стеке, принудив ветви к удаленному. После создания запросов `submit` на вытягивание автоматически создает стек GitHub для связывания запросов на вытягивание. Если стек уже существует GitHub, например из предыдущей отправки, новые запросы на вытягивание добавляются в существующий стек.

Если каждый запрос на вытягивание в стеке уже был объединен, этот стек завершен и не может быть расширен. В этом случае `submit` автоматически запускает новый стек, корневый стек для не объединенных ветвей и создает его в GitHub, оставляя объединенный стек без изменений.

В интерактивном терминале `submit` открывается полноэкранный редактор на одном экране.

* **Левая панель.** Каждая ветвь без запроса на вытягивание включена по умолчанию. Отмените выбор, который вы не хотите отправить с <kbd>помощью ctrl</kbd>+<kbd>X</kbd>. Так как каждый запрос на вытягивание строится в ветви под ним, отменяя выбор ветви, также отменяет выбор тех, от которых он размещен, и повторно включает ветвь повторно включает те из них, от которых она зависит. Ветви, у которых уже есть запрос на вытягивание, открытые, черновики, очереди или объединенные, отображаются для контекста, но блокируются. Измените их в Интернете.
* **Правая панель.** Для ориентированной ветви черновики заголовка и описания и выберите, открывается ли запрос на вытягивание, готовый к просмотру или в виде черновика. Описание предварительно заполнено из шаблона запроса на вытягивание репозитория или фиксаций с предварительным просмотром markdown и escape-файлом `$EDITOR` . Фокусирование заблокированной ветви показывает карточку только для чтения с ссылкой на запрос на вытягивание. Нажмите <kbd>кнопку o</kbd> , чтобы открыть ее в браузере.

Нажмите <kbd>клавиши CTRL</kbd>+<kbd>S</kbd> , чтобы отправить все включенные запросы на вытягивание одновременно. Редактор поддерживает ввод клавиатуры и мыши. Передайте `--auto`или запустите команду в неинтерактивном терминале, например CI, чтобы пропустить редактор и использовать автоматически созданные заголовки.

Если ветви уже имеют открытые запросы на вытягивание, но нет стека GitHub, у вас есть возможность связать запросы на вытягивание в стек с <kbd>помощью ctrl</kbd>+<kbd>B</kbd>.

В редакторе новые запросы на вытягивание по умолчанию готовы к просмотру. Вы можете перевернуть любой запрос на вытягивание для черновика с помощью переключателя. При использовании `--auto`новые запросы на вытягивание создаются как черновики, если вы не передаете `--open`.

| Flag              | Описание                                                                                                                                                |
| ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `--auto`          | Пропустить редактор и использовать автоматически созданные заголовки запросов на вытягивание                                                            |
| `--open`          | Создайте новые запросы на вытягивание как готовые для проверки, а не черновики, и пометьте существующие запросы на вытягивание как готовые для проверки |
| `--remote <name>` | Удаленный для отправки (по умолчанию автоматически обнаруженный удаленный)                                                                              |

**Примеры:**

```shell
gh stack submit
gh stack submit --auto
gh stack submit --open
```

### `gh stack sync`

Получение, перебазировка, отправка и синхронизация состояния запроса на вытягивание в одной команде.

```shell
gh stack sync [flags]
```

Синхронизирует весь стек.

1. **Принести.** Извлекает последние изменения из `origin`.
2. **Согласование удаленного стека.** Зеркально отражает стек локально GitHub . Когда запросы на вытягивание были добавлены в стек GitHub, чтобы удаленный был впереди локального стека, их ветви вытягиваются и добавляются в локальный стек автоматически. Если локальные и удаленные стеки действительно разошлись, например, так как вы добавили ветвь локально, а различные запросы на вытягивание были добавлены в стек GitHub, вам будет предложено устранить разницу. См. [раздел "Разверждаемые стеки](#diverged-stacks)". В неинтерактивном терминале расхождение прерывает синхронизацию, и ничего не отправляется или обновляется.
3. **Быстрый вперед магистрали.** Переадресовывает ветвь магистрали, чтобы соответствовать удаленному. Этот шаг пропускается, если ветви разошлись.
4. **Каскадная перебаза.** Перебазирует все ветви стека на обновленные родители, но только если магистраль перемещена. Если обнаружен конфликт, все ветви восстанавливаются в исходном состоянии, и рекомендуется запускать `gh stack rebase` их для интерактивного разрешения конфликтов.
5. **Нажмите.** Отправляет все ветви, используя `--force-with-lease` , если произошла перебаза.
6. **Синхронизация запросов на вытягивание.** Синхронизирует состояние запроса на вытягивание из GitHub и сообщает о состоянии каждого запроса на вытягивание.
7. **Синхронизация стека.** Связывает открытые запросы на вытягивание стека в стек GitHub, создавая объект удаленного стека, если он еще не существует, или обновляет его, если он частично сформирован. Это происходит только в том случае, если существуют два или более запросов на вытягивание. Синхронизация никогда не открывает запросы на вытягивание. Используйте `gh stack submit` для этого.
8. **Чернослив.** В интерактивных терминалах предлагается удалить локальные ветви для объединенных запросов на вытягивание. Используется `--prune` для автоматического обрезки.

Чистое удаленное обновление, в котором запросы на вытягивание добавляются поверх локального стека, вытягиваются автоматически без запроса, поэтому `sync` безопасно выполняться в службе автоматизации. Синхронизация запрашивает только те стеки, когда стеки действительно разошлись.

#### Разверждаемые стеки

Если ни один стек не является чистым префиксом другого, например, так как вы добавили ветвь локально, а отдельные запросы на вытягивание были добавлены в один и тот же стек GitHub, синхронизация не может объединить два автоматически. В интерактивном терминале он предлагает три варианта.

* **Используйте удаленный стек в качестве источника истины.** Заменяет состав локального стека удаленным, извлекая отсутствующие ветви. Если вы находились в ветви, в которую удаленный стек больше не содержится, вы перемещаесь в ближайшую выживающую ветвь. Для этого требуется чистое рабочее состояние без незафиксированных изменений.
* **Удаление стека GitHubв .** Удаляет объект GitHub стека и останавливает синхронизацию. Запросы на вытягивание и локальные ветви не связаны, и удаляется только стек GitHub . Повторно создайте стек с `gh stack submit`помощью первого запуска `gh stack modify` , если вы хотите изменить ее структуру. Это способ сопоставления GitHub локального стека, так как `submit`, в отличие `sync`от этого, также создает запросы на вытягивание для любых ветвей, которые вы еще не отправили.
* **Отмена.** Прерывает синхронизацию без отправки ветвей или обновления запросов на вытягивание.

В неинтерактивном терминале расхождение прерывает синхронизацию, завершается успешно, без отправки ветвей или обновления запросов на вытягивание. Разрешите его путем отмены размещения и повторного восстановления стека.

| Flag              | Описание                                                                                    |
| ----------------- | ------------------------------------------------------------------------------------------- |
| `--remote <name>` | Удаленный для получения и отправки (по умолчанию для автоматического обнаружения удаленных) |
| `--prune`         | Удаление локальных ветвей для объединенных запросов на вытягивание                          |

**Примеры:**

```shell
gh stack sync

# Sync and automatically prune merged branches
gh stack sync --prune
```

### `gh stack rebase`

Извлеките из удаленного узла и выполните каскадную перебазу по стеку.

```shell
gh stack rebase [flags] [branch]
```

Извлекает последние изменения, `origin`а затем гарантирует, что каждая ветвь в стеке имеет конечную часть предыдущего слоя в журнале фиксации. Ветви перебазируются по порядку, от магистрали вверх.

Если запрос на вытягивание ветви был объединен, перебаза автоматически переключается в `--onto` режим для правильного воспроизведения фиксаций в верхней части целевого объекта слияния.

Если конфликт повторной базы возникает, операция приостанавливает и выводит конфликтующие файлы с номерами строк. Устраните конфликты, наведите их на `git add`стадию, а затем продолжайте работу `--continue`. Чтобы отменить всю перебазу, используйте `--abort` для восстановления всех ветвей в их состоянии перед повторной базой.

| Flag                              | Описание                                                                                                     |
| --------------------------------- | ------------------------------------------------------------------------------------------------------------ |
| `--downstack`                     | Только перебазировать ветви из магистрали в текущую ветвь                                                    |
| `--upstack`                       | Только перебазировать ветви из текущей ветви в верхнюю часть                                                 |
| `--no-trunk`                      | Пропустить магистраль. Только перебазировать ветви стека на другую, без получения и без перебазы магистрали. |
| `--continue`                      | Продолжить повторную базу после разрешения конфликтов                                                        |
| `--abort`                         | Отмена повторной базы и восстановление всех ветвей в их состоянии перед повторной базой                      |
| `--remote <name>`                 | Удаленное получение из (по умолчанию для автоматического обнаружения удаленного)                             |
| `--committer-date-is-author-date` | Задайте дату фиксации на дату автора во время повторной базы данных. Псевдоним: `--preserve-dates`.          |

| Argument   | Описание                                                |
| ---------- | ------------------------------------------------------- |
| `[branch]` | Целевая ветвь (по умолчанию используется текущая ветвь) |

**Примеры:**

```shell
# Rebase the entire stack
gh stack rebase

# Only rebase branches below the current one
gh stack rebase --downstack

# Only rebase branches above the current one
gh stack rebase --upstack

# Rebase stack branches without pulling from or rebasing with trunk
gh stack rebase --no-trunk

# After resolving a conflict
gh stack rebase --continue

# Abort rebase and restore everything
gh stack rebase --abort

# Rebase and preserve committer date as author date
gh stack rebase --committer-date-is-author-date
```

### `gh stack push`

Отправьте активные ветви в текущем стеке в удаленный.

```shell
gh stack push [flags]
```

Отправляет каждую активную ветвь, за исключением объединенных и очередных ветвей, в одном `git push`случае с помощью явной проверки на ветвь `--force-with-lease` . Обновление не является атомарным. Ветви, аренду которых можно обновить, даже если другая ветвь отклонена. Исправьте отклоненную ветвь и повторите команду. Ветви, которые уже были обновлены, остаются неизменными. Эта команда не создает или обновляет запросы на вытягивание. Используйте `gh stack submit` для этого.

| Flag              | Описание                                                                   |
| ----------------- | -------------------------------------------------------------------------- |
| `--remote <name>` | Удаленный для отправки (по умолчанию автоматически обнаруженный удаленный) |

**Примеры:**

```shell
gh stack push
gh stack push --remote upstream
```

### `gh stack link`

Связывание запросов на вытягивание в стек GitHub без локального отслеживания.

```shell
gh stack link [flags] <stack-number | branch-or-pr> <branch-or-pr> [...]
```

Создает или обновляет стек GitHub из имен ветвей или номеров запросов на вытягивание и URL-адреса. Эта команда не создает или не изменяет состояние локального отслеживания. Он предназначен для людей, которые управляют филиалами с другими инструментами локально, например Jujutsu, Sapling или git-town, и хотят открыть стек запросов на вытягивание. См [. раздел AUTOTITLE](/ru/enterprise-cloud@latest/pull-requests/reference/use-other-tools-with-stacked-pull-requests).

Аргументы в порядке стека от нижнего до верхнего. Аргументы ветви отправляются в удаленный режим автоматически перед созданием или поиском запросов на вытягивание. Для ветвей, которые уже имеют открытые запросы на вытягивание, используются эти запросы на вытягивание. Для ветвей без запросов на вытягивание новые запросы на вытягивание создаются автоматически с правильной цепочкой базовых ветвей. Существующие запросы на вытягивание, базовые ветви которых не соответствуют ожидаемой цепочке, автоматически исправляются.

Если запросы на вытягивание еще не находятся в стеке, создается новый стек. Если некоторые запросы на вытягивание уже находятся в стеке, существующий стек обновляется, чтобы включить новые запросы на вытягивание. Существующие запросы на вытягивание никогда не удаляются из стека, так как обновление является аддитивным только.

Чтобы увеличить существующий стек без перечисления запросов на вытягивание еще раз, передайте номер стека, отображаемое в пользовательском интерфейсе GitHubстека в качестве первого аргумента. Остальные аргументы добавляются в верхнюю часть этого стека. Аргументы, уже имеющиеся в стеке, пропускаются, а аргументы, принадлежащие другому стеку, отклоняются. Так как числа запросов стека и вытягивания никогда не перекрываются, числовой первый аргумент рассматривается как стек, только если он соответствует существующему стеку. В противном случае оно рассматривается как запрос на вытягивание или ветвь.

| Flag              | Описание                                                                                                                                                    |
| ----------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `--base <branch>` | Базовая ветвь для нижней части стека (по умолчанию используется ветвь репозитория по умолчанию). Этот флаг игнорируется при добавлении в существующий стек. |
| `--open`          | Пометьте новые и существующие запросы на вытягивание как готовые к проверке                                                                                 |
| `--remote <name>` | Удаленный для отправки (по умолчанию автоматически обнаруженный удаленный)                                                                                  |

**Примеры:**

```shell
# Link branches into a stack (pushes, creates pull requests, creates stack)
gh stack link feature-auth feature-api feature-ui

# Link existing pull requests by number
gh stack link 10 20 30

# Link existing pull requests by URL
gh stack link https://github.com/owner/repo/pull/10 https://github.com/owner/repo/pull/20

# Add branches to an existing stack of pull requests
gh stack link 42 43 feature-auth feature-ui

# Append to the top of an existing stack by its stack number, with no need
# to list the pull requests already in stack 7 again
gh stack link 7 48 feature-ui

# Use a different base branch and mark pull requests as ready for review
gh stack link --base develop --open feat-a feat-b feat-c
```

### `gh stack merge`

Объединение одного или нескольких запросов на вытягивание с накоплением одновременно.

```shell
gh stack merge [<stack-number> | <pr-number>]
```

Объединяет каждый запрос на вытягивание в стеке вплоть до выбранного запроса на вытягивание в базовую ветвь. Слияние — это единая операция "все" или "ничего". Если не удается объединить любой запрос на вытягивание, ни один из них не объединен.

Без аргументов команда использует активный локальный стек. Укажите номер стека для объединения стека, который вы не проверили, что является чисто удаленной операцией или укажите номер запроса на вытягивание для слияния непосредственно с этим запросом на вытягивание.

В интерактивном терминале командная строка определяет, какие запросы на вытягивание необходимо объединить, выбрать метод слияния и подтвердить. В неинтерактивном терминале или при использовании `--yes`весь стек или все содержимое до указанного запроса на вытягивание объединяется без запроса, используя метод слияния, который вы последний раз использовали, если не указать его.

Перед слиянием проверяется только базовое состояние запроса на вытягивание. Каждый запрос на вытягивание должен быть открытым и не должен быть черновиком.
GitHub вычисляет правила защиты ветви и репозитория при выполнении слияния, а все ошибки передаются вам.

> \[!NOTE]
> Не удается обойти требования к слиянию при слиянии стека запросов на вытягивание.

Если базовая ветвь использует очередь слияния, стек добавляется в очередь, а не объединяется напрямую. Очередь выбирает метод слияния, поэтому запрос пропускает шаг метода слияния, а `--merge-method``--squash``--rebase``--merge` флаги игнорируются с предупреждением. Выбранные запросы на вытягивание добавляются в очередь вместе, но они объединяются как очереди, поэтому они могут приземлиться в отдельных группах, а не одновременно.

| Flag                              | Описание                                                       |
| --------------------------------- | -------------------------------------------------------------- |
| `--merge-method <method>`         | Метод слияния для использования: `merge`, `squash`или `rebase` |
| `--merge`, , `--squash``--rebase` | Короткие инструкции для соответствующего метода слияния        |
| `-y, --yes`                       | Слияние без запроса на подтверждение                           |

**Примеры:**

```shell
# Merge the current stack, choosing pull requests interactively
gh stack merge

# Merge a stack you do not have checked out, by stack number
gh stack merge 7

# Merge everything up to and including pull request 42
gh stack merge 42

# Merge the whole current stack without prompting, squashing commits
gh stack merge --yes --squash
```

## Навигация

Команды навигации перемещают вас между ветвями в текущем стеке без необходимости запоминать имена ветвей. Нижняя часть стека является ветвью, ближе всего к магистрали, а верхняя — ветвь от нее.
`up` двигается от магистрали и `down` движется к нему.

Все команды навигации зажимают границы стека. Перемещение вверх с верхней или вниз вниз ничего не делает и отображает сообщение.

### `gh stack switch`

Интерактивный переход на другую ветвь в стеке.

```shell
gh stack switch
```

Отображает интерактивный элемент выбора всех ветвей в текущем стеке, упорядоченный сверху, от магистрали до нижнего, близкого к магистрали, с их номером позиции. Выберите ветвь, чтобы извлечь ее.

Для этой команды требуется интерактивный терминал.

**Примеры:**

```shell
gh stack switch
#    → Select a branch in the stack to switch to
#      5. frontend
#      4. api-endpoints
#      3. auth-layer
#      2. db-schema
#      1. config-setup
```

### `gh stack up`

Двигайтесь к верхней части стека, от магистрали.

```shell
gh stack up [n]
```

Перемещается вверх `n` по ветвям, по умолчанию — 1. Если вы находитесь в ветви магистрали, `up` перейдите в первую ветвь стека.

**Примеры:**

```shell
# Move up one layer
gh stack up

# Move up three layers
gh stack up 3
```

### `gh stack down`

Двигайтесь вниз к нижней части стека, в сторону магистрали.

```shell
gh stack down [n]
```

Перемещается вниз `n` ветвей, по умолчанию — 1.

**Примеры:**

```shell
# Move down one layer
gh stack down

# Move down two layers
gh stack down 2
```

### `gh stack top`

Перейдите в верхнюю часть стека.

```shell
gh stack top
```

Проверяет ветвь с магистрали.

### `gh stack bottom`

Переход к нижней части стека.

```shell
gh stack bottom
```

Проверяет ветвь ближе всего к магистрали.

### `gh stack trunk`

Перейдите в магистральную ветвь.

```shell
gh stack trunk
```

Проверяет ветвь магистрали текущего стека, например `main`. Вы должны находиться в ветви, которая входит в стек.

## Utilities

### `gh stack alias`

Создайте короткий псевдоним команды, чтобы можно было ввести меньше.

```shell
gh stack alias [flags] [name]
```

Устанавливает небольшой скрипт-оболочку, `~/.local/bin/` в который пересылает все аргументы `gh stack`. Псевдоним по умолчанию — `gs`это имя, но можно выбрать любое имя, передав его в качестве аргумента. После установки вместо него `gh stack push`можно запустить`gs push`.

В Windows автоматическое создание псевдонима не поддерживается. Команда выводит инструкции вручную по созданию пакетного файла или функции PowerShell.

| Flag       | Описание                             |
| ---------- | ------------------------------------ |
| `--remove` | Удаление созданного ранее псевдонима |

**Примеры:**

```shell
# Create the default alias (gs), so that "gs push" and "gs view" both work
gh stack alias

# Create a custom alias
gh stack alias gst

# Remove an alias
gh stack alias --remove
gh stack alias --remove gst
```

### `gh stack feedback`

Поделитесь отзывом о `gh stack` расширении.

```shell
gh stack feedback [title]
```

Открывает обсуждение в [репозитории gh-stack](https://github.com/github/gh-stack) , чтобы отправить отзыв. При необходимости можно указать название для записи обсуждения.

**Примеры:**

```shell
gh stack feedback
gh stack feedback "Support for reordering branches"
```

## Переменные среды

| Variable                            | Values                                                                                                                                                                                                                                                                                                                                                             | Описание |
| ----------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------- |
| `GH_STACK_THEME`                    |                                                                                                                                                                                                                                                                                                                                                                    |          |
| `auto`(по умолчанию), `light``dark` | Управляет цветовой палитрой интерактивных экранов для `submit`выходных `view``modify`данных команд и всех цветных команд. Цвета адаптируются к фону терминала автоматически. Установите эту переменную для принудительной светлой или темной палитры, если терминал не сообщает о своем фоновом режиме, что может произойти в некоторых SSH или `tmux` настройках. |          |

```shell
# Force the light palette for one command
GH_STACK_THEME=light gh stack view
```

## Коды выхода

| Код             | Значение                                                               |
| --------------- | ---------------------------------------------------------------------- |
| 0               | Success                                                                |
| 1               | Общая ошибка                                                           |
| 2               | Не в стеке или стеке не найден                                         |
| 3               | Конфликт повторной базы данных                                         |
| 4               |                                                                        |
| GitHub Сбой API |                                                                        |
| 5               | Недопустимые аргументы или флаги                                       |
| 6               | Требуется диамбигуация, так как ветвь принадлежит нескольким стекам    |
| 7               | Перебаза уже выполняется                                               |
| 8               | Стек заблокирован другим процессом                                     |
| 9               | Запросы на вытягивание с накоплением не включены для этого репозитория |
| 10              | Изменение прерванного сеанса и требуется восстановление                |

## Дополнительные материалы

* [Stacked pull requests](/ru/enterprise-cloud@latest/pull-requests/reference/stacked-pull-requests)
* [Creating stacked pull requests](/ru/enterprise-cloud@latest/pull-requests/how-tos/create-pull-requests/creating-stacked-pull-requests)
* [Managing stacked pull requests](/ru/enterprise-cloud@latest/pull-requests/how-tos/create-pull-requests/managing-stacked-pull-requests)
* [Устранение неполадок с накоплением запросов на вытягивание](/ru/enterprise-cloud@latest/pull-requests/how-tos/merge-and-close-pull-requests/troubleshooting-stacked-pull-requests)