# Stacked pull requests CLI コマンド

GitHub CLIで、gh stack拡張機能のすべてのコマンド、フラグ、終了コードを見つけます。

> \[!NOTE] この機能はパブリック プレビュー段階であり、変更される可能性があります。

GitHub CLIの`gh stack`拡張機能は、ローカル リポジトリからプル要求のスタックを作成および管理します。 スタックの概要については、 [スタックされたプル要求](/ja/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`を実行します。

## コマンドの概要

| 命令                                        | 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)         | プル要求の状態を 1 つのコマンドでフェッチ、リベース、プッシュ、同期します。          |
| [`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)       | 一度に 1 つ以上のスタック プル要求をマージします。                      |
| [`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)       | 短いコマンド エイリアスを作成して、less を入力できるようにします。             |
| [`gh stack feedback`](#gh-stack-feedback) |                                                  |
| `gh stack`拡張機能に関するフィードバックを共有します。          |                                                  |

## スタック管理

### `gh stack init`

現在のリポジトリで新しいスタックを初期化します。

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

新しいスタックをローカルで初期化します。 対話型モード (引数なし) では、コマンドはブランチ名の入力を求め、最初のレイヤーとして Current Branch を使用するように指定します。

明示的なブランチ名を指定すると、既存のブランチが自動的に採用され、不足しているブランチが作成されます。
`--base`でオーバーライドしない限り、トランクはリポジトリの既定のブランチに既定で設定されます。

このコマンドを使用すると、 `git rerere` が自動的に有効になるため、競合の解決はリベース間で記憶されます。

| フラグ                   | Description                        |
| --------------------- | ---------------------------------- |
| `-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` を指定すると、ブランチ名は日付とスラッグ形式 ( `03-24-add_login` など) で自動的に生成されます。

| フラグ                      | Description                       |
| ------------------------ | --------------------------------- |
| `-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` になります。

| フラグ           | Description           |
| ------------- | --------------------- |
| `-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 UI に表示されるリポジトリ スコープの識別子です。 数値と一致するものが何もない場合は、ブランチ名として試行されます。

リモート スタックを参照すると、コマンドは 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]
```

スタックを再構築するための対話型ターミナル UI を開きます。 すべての変更はインターフェイスでステージングされ、<kbd>Ctrl+</kbd><kbd>S</kbd> キーを押すとまとめて適用されます。 マージされたプル要求からブランチを変更することはできません。

| フラグ          | Description                             |
| ------------ | --------------------------------------- |
| `--continue` | 競合を解決した後に続行する                           |
| `--abort`    | コマンドを実行する前に、変更セッションを中止し、スタックをその状態に復元します |

**前提 条件**

このコマンドは、インターフェイスを開く前に次の条件を確認します。

1. アクティブなスタックがローカルでチェックアウトされている必要があります。
2. 作業ツリーはクリーンで、コミットされていない変更は必要ありません。
3. リベースは進行中です。
4. マージのためにスタック内のプル要求がキューに登録されません。
5. コミット履歴は線形である必要があります。マージ コミットも分岐分岐もありません。

**Operations**

| Operation    | 鍵                                                     | Effect |
| ------------ | ----------------------------------------------------- | ------ |
| Drop         |                                                       |        |
| <kbd>x</kbd> | スタックからブランチとそのコミットを削除します。 ローカル ブランチと関連するプル要求は保持されます。   |        |
| 折りたたむ        |                                                       |        |
| <kbd>d</kbd> | トランクに向かって、下のブランチにコミットを吸収します。 折りたたまれた分岐がスタックから削除されます。  |        |
| 折りたたむ        |                                                       |        |
| <kbd>u</kbd> | トランクから離れて、上記のブランチにコミットを吸収します。 折りたたまれた分岐がスタックから削除されます。 |        |
| 下に挿入         |                                                       |        |
| <kbd>i</kbd> | カーソルの下のトランクに新しい空の分岐を挿入します。                            |        |
| 上に挿入         |                                                       |        |
| <kbd>私</kbd> | トランクから離して、カーソルの上に新しい空の分岐を挿入します。                       |        |
| 下へ移動         |                                                       |        |

<kbd>
</kbd>
+
| 分岐をトランクに向かって下に並べ替えます。 |
| 上へ移動 | 
<kbd>
</kbd>
+
| トランクから離れてブランチを上に並べ替えます。 |
| 名前の変更 | 
<kbd>r</kbd> | インライン プロンプトを使用してブランチの名前を変更します。 |
| Undo | 
<kbd>Z</kbd> | 最後にステージングされた操作を元に戻します。 |

**適用フェーズ**

Ctrl+<kbd>S</kbd><kbd>キー</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のスタック UI に表示される識別子) を指定して、特定のスタックのスタックを解除します。 これは、スタックがローカルにチェックアウトされているかどうかに関係なく、リポジトリ内のどこからでも機能します。これは、スタックが GitHub API を介して直接スタック解除されるためです。 スタックもローカルで使用できる場合、そのローカル追跡も削除されます。

マージ、マージ、またはキューに格納されたプル要求は、 GitHub 上のスタックから削除できず、スタックの一部のままです。 すべてのプル要求が削除されると、スタックはディゾルブされ、ローカル追跡はすべて削除されます。 一部のプル要求がスタックされたままになると、スタックは保持され、ローカル追跡がある場合は変更されません。
`--local`を使用してリモート操作をスキップし、ローカル追跡のみを削除します。

このコマンドは、分岐の削除、分岐の挿入、分岐の並べ替え、ブランチの名前変更、またはその他の大きな変更を行ってスタックを再構築する必要がある場合に便利です。 スタックを解除した後、 `gh stack init` を使用して、必要な構造でスタックを再作成します。 既存のブランチは自動的に採用されます。

| フラグ       | Description                       |
| --------- | --------------------------------- |
| `--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` は 1 つの画面で全画面表示エディターを開きます。

* **左側のパネル。** 既定では、プル要求のないすべてのブランチが含まれます。 <kbd>Ctrl+</kbd><kbd>X</kbd> で送信しないすべての選択を解除します。 各プル要求は、その下のブランチに基づいて構築されるため、ブランチの選択を解除すると、その上に積み重ねられたブランチの選択も解除され、ブランチの下に依存するものが再び含まれます。 開いている、下書き、キューに入っている、またはマージされているかどうかに関係なく、既にプル要求があるブランチはコンテキスト用に表示されますが、ロックされています。 Web 上のものを編集します。
* **右側のパネル。** 対象ブランチの場合は、タイトルと説明を下書きし、pull request を開いてレビューの準備をするか、下書きとして開くかを選択します。 説明は、リポジトリの pull request テンプレートまたはコミットから事前に入力され、マークダウン プレビューと `$EDITOR` エスケープが含まれます。 ロックされたブランチにフォーカスを設定すると、プル要求へのリンクを含む読み取り専用カードが表示されます。 <kbd>o</kbd> キーを押してブラウザーで開きます。

Ctrl+<kbd>S</kbd><kbd>キー</kbd>を押して、含まれるすべての pull request を一度に送信します。 エディターでは、キーボード入力とマウス入力の両方がサポートされています。
`--auto`渡すか、CI などの非対話型ターミナルでコマンドを実行してエディターをスキップし、自動生成されたタイトルを使用します。

ブランチに既に開いている pull request があるが、GitHubにスタックが存在しない場合は、Ctrl+<kbd>B</kbd><kbd>を</kbd>使用してプル要求をスタックにリンクすることができます。

エディターでは、新しい pull requests は既定でレビューの準備が整います。 トグルを使用して、任意の pull request を下書きに反転できます。
`--auto`では、`--open`に合格しない限り、新しい pull request が下書きとして作成されます。

| フラグ               | Description                                               |
| ----------------- | --------------------------------------------------------- |
| `--auto`          | エディターをスキップし、自動的に生成された pull request タイトルを使用する              |
| `--open`          | 下書きではなくレビューの準備ができている新しいプル要求を作成し、既存のプル要求をレビューの準備完了としてマークする |
| `--remote <name>` | プッシュするリモート (既定では、自動的に検出されたリモート)                           |

**例:**

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

### `gh stack sync`

プル要求の状態を 1 つのコマンドでフェッチ、リベース、プッシュ、同期します。

```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 上のスタックにリンクし、まだ存在しない場合はリモート スタック オブジェクトを作成するか、部分的に形成されている場合は更新します。 これは、2 つ以上のプル要求が存在する場合にのみ発生します。 同期によってプル要求が開かれることはありません。 その場合は `gh stack submit` を使用します。
8. **プルーン。** 対話型ターミナルでは、マージされたプル要求のローカル ブランチを削除するように求められます。
   `--prune`を使用して自動的に排除します。

ローカル スタックの上にプル要求が追加されるクリーンなリモート先行更新は、プロンプトを表示せずに自動的にプルダウンされるため、 `sync` は安全に自動化で実行できます。 同期は、スタックが本当に分岐した場合にのみプロンプトを表示します。

#### 分岐スタック

どちらのスタックも他のスタックのクリーン プレフィックスでない場合(たとえば、 GitHub上で個別のプル要求が同じスタックに追加されている間にブランチをローカルに追加したため)、同期で 2 つを自動的にマージすることはできません。 対話型ターミナルでは、3 つの選択肢があります。

* **リモート スタックを信頼のソースとして使用します。** ローカル スタックコンポジションをリモートに置き換え、不足しているブランチをプルします。 リモート スタックに含まれるものがないブランチを使用していた場合は、最も近い存続ブランチに移動されます。 これには、コミットされていない変更を伴うクリーンな作業状態が必要です。
* **GitHubのスタックを削除します。** GitHubのスタック オブジェクトを削除し、同期を停止します。pull request とローカル ブランチは変更されておらず、GitHub上のスタックのみが削除されます。 構造を変更する場合は、最初に`gh stack modify`実行して、`gh stack submit`を使用してスタックを再作成します。 これは、`sync`とは異なり、`submit`はまだ送信していないブランチに対するプル要求も作成するため、GitHubをローカル スタックと一致させる方法です。
* **キャンセル。** ブランチをプッシュしたり、プル要求を更新したりせずに同期を中止します。

非対話型ターミナルでは、分岐をプッシュしたりプル要求を更新したりすることなく、同期が中断され、正常に終了します。 スタックを解除して再作成して解決します。

| フラグ               | Description                             |
| ----------------- | --------------------------------------- |
| `--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` を使用して、すべてのブランチをリベース前の状態に復元します。

| フラグ                               | Description                                                 |
| --------------------------------- | ----------------------------------------------------------- |
| `--downstack`                     | トランクから現在のブランチにブランチのみをリベースする                                 |
| `--upstack`                       | 現在のブランチから一番上にブランチのみをリベースする                                  |
| `--no-trunk`                      | トランクをスキップします。 スタック ブランチを相互にリベースするだけで、フェッチもトランク リベースも行われません。 |
| `--continue`                      | 競合を解決した後にリベースを続行する                                          |
| `--abort`                         | リベースを中止し、すべてのブランチをリベース前の状態に復元します                            |
| `--remote <name>`                 | フェッチするリモート (既定では、自動的に検出されたリモート)                             |
| `--committer-date-is-author-date` | リベース中に、コミッターの日付を作成者の日付に設定します。 エイリアス: `--preserve-dates`。    |

| Argument   | Description              |
| ---------- | ------------------------ |
| `[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]
```

ブランチごとの明示的な`--force-with-lease`チェックを使用して、マージされたブランチとキューに登録されたブランチを除くすべてのアクティブブランチを 1 つの`git push`でプッシュします。 更新プログラムはアトミックではありません。 リース パスを持つブランチは、別のブランチが拒否された場合でも更新できます。 拒否されたブランチを修正し、コマンドをもう一度実行します。 既に更新されたブランチは変更されません。 このコマンドは、プル要求を作成または更新しません。 その場合は `gh stack submit` を使用します。

| フラグ               | Description                     |
| ----------------- | ------------------------------- |
| `--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> [...]
```

ブランチ名またはプル要求の番号と URL から、 GitHub 上のスタックを作成または更新します。 このコマンドは、ローカル追跡状態を作成または変更しません。 これは、Jujutsu、Sapling、git-town などの他のツールを使用してブランチをローカルで管理し、プル要求のスタックを開きたいユーザー向けに設計されています。 「[積み上げプル要求で他のツールを使用する](/ja/pull-requests/reference/use-other-tools-with-stacked-pull-requests)」を参照してください。

引数は、下から上の順にスタック順に指定します。 ブランチ引数は、プル要求が作成または検索される前に、リモートに自動的にプッシュされます。 既に開いている pull request を持つブランチでは、それらのプル要求が使用されます。 プル要求のないブランチの場合、新しいプル要求は、正しいベース ブランチ チェーンを使用して自動的に作成されます。 ベース ブランチが予想されるチェーンと一致しない既存のプル要求は自動的に修正されます。

プル要求がまだスタック内にない場合は、新しいスタックが作成されます。 一部のプル要求が既にスタック内にある場合は、新しいプル要求を含むように既存のスタックが更新されます。 更新プログラムは追加のみであるため、既存のプル要求はスタックから削除されません。

プル要求を再び一覧表示せずに既存のスタックを拡張するには、最初の引数としてスタック番号 ( GitHubのスタック UI に表示される番号) を渡します。 残りの引数は、そのスタックの先頭に追加されます。 既にスタック内の引数はスキップされ、別のスタックに属する引数は拒否されます。 スタックとプルの要求番号は重複しないため、数値の最初の引数は、既存のスタックと一致する場合にのみスタックとして扱われます。 それ以外の場合は、プル要求またはブランチとして扱われます。

| フラグ               | Description                                                        |
| ----------------- | ------------------------------------------------------------------ |
| `--base <branch>` | スタックの下部のベース ブランチ (既定値はリポジトリの既定のブランチ)。 既存のスタックに追加する場合、このフラグは無視されます。 |
| `--open`          | 新規および既存の pull request をレビューの準備完了としてマークする                           |
| `--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`

一度に 1 つ以上のスタック プル要求をマージします。

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

選択したプル要求まで、スタック内のすべてのプル要求をベース ブランチにマージします。 マージは、単一のすべてまたは何もない操作です。 プル要求をマージできない場合、それらのいずれもマージされません。

引数を指定しない場合、コマンドはアクティブなローカル スタックを使用します。 チェックアウトしていないスタックをマージするスタック番号 (純粋にリモート操作) を指定するか、プル要求まで直接マージするプル要求番号を指定します。

対話型ターミナルで、マージするプル要求を選択し、マージ 方法を選択して確認するように求められます。 非対話型ターミナルで、または `--yes`を使用する場合、スタック全体、または指定した pull request までのすべてのものが、指定しない限り最後に使用したマージ メソッドを使用して、プロンプトを表示せずにマージされます。

マージする前に、基本的な pull request 状態のみがチェックされます。 各プル要求は開いている必要があり、下書きにすることはできません。
GitHub では、マージの実行時にブランチの保護とリポジトリの規則が評価され、エラーが報告されます。

> \[!NOTE]
> スタックされたプル要求をマージするときに、マージ要件をバイパスすることはできません。

ベース ブランチでマージ キューが使用されている場合、直接マージされるのではなく、スタックがキューに追加されます。 キューはマージ メソッドを選択するため、プロンプトはマージメソッドのステップをスキップし、 `--merge-method`、 `--squash`、 `--rebase`、および `--merge` フラグは警告と共に無視されます。 選択したプル要求は一緒にキューに追加されますが、キューで処理されるとマージされるため、一度にすべてではなく個別のグループに配置できます。

| フラグ                             | Description                                  |
| ------------------------------- | -------------------------------------------- |
| `--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
```

## Navigation

ナビゲーション コマンドは、ブランチ名を覚えていなくても、現在のスタック内のブランチ間を移動します。 スタックの下部はトランクに最も近い分岐で、上部は最も遠い分岐です。
`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]
```

すべての引数を`gh stack`に転送する小さなラッパー スクリプトを`~/.local/bin/`にインストールします。 既定のエイリアス名は `gs`されていますが、引数として渡すことで任意の名前を選択できます。 セットアップ後は、`gh stack push`の代わりに`gs push`を実行できます。

Windowsでは、エイリアスの自動作成はサポートされていません。 このコマンドは、バッチ ファイルまたは PowerShell 関数を作成するための手動の手順を出力します。

| フラグ        | Description       |
| ---------- | ----------------- |
| `--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"
```

## 環境変数

| 変数                                                                                                                                                                            | 値 | Description |
| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | - | ----------- |
| `GH_STACK_THEME`                                                                                                                                                              |   |             |
| `auto` (既定値)、`light`、`dark`                                                                                                                                                   |   |             |
| `submit`、`modify`、`view`、およびすべての色付きコマンド出力の対話型画面のカラー パレットを制御します。 色はターミナルの背景に自動的に適応します。 ターミナルが背景を報告しない場合に、この変数を設定して、SSH または `tmux` の設定で発生する可能性があるライト パレットまたはダーク パレットを強制的に設定します。 |   |             |

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

## 終了コード

| Code           | Meaning                              |
| -------------- | ------------------------------------ |
| 0              | 成功                                   |
| 1              | 一般的なエラー                              |
| 2              | スタック内にない、またはスタックが見つからない              |
| 3              | リベースの競合                              |
| 4              |                                      |
| GitHub API エラー |                                      |
| 5              | 引数またはフラグが無効です                        |
| 6              | 分岐が複数のスタックに属しているため、あいまいさを解消する必要があります |
| 7              | リベースは既に進行中です                         |
| 八              | スタックが別のプロセスによってロックされている              |
| 9              | このリポジトリに対してスタック プル要求が有効になっていません      |
| 10             | セッションの変更が中断され、回復が必要です                |

## 詳細については、次を参照してください。

* [スタックされたプル要求](/ja/pull-requests/reference/stacked-pull-requests)
* [スタックされたプル要求の作成](/ja/pull-requests/how-tos/create-pull-requests/creating-stacked-pull-requests)
* [スタックされたプル要求の管理](/ja/pull-requests/how-tos/create-pull-requests/managing-stacked-pull-requests)
* [スタックプル要求のトラブルシューティング](/ja/pull-requests/how-tos/merge-and-close-pull-requests/troubleshooting-stacked-pull-requests)