Skip to main content

スタックされたプルリクエストの CLI コマンド

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

メモ

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

gh stackのGitHub CLI拡張機能は、ローカル リポジトリからプル要求のスタックを作成および管理します。 スタックの概要については、 スタックされたプル要求 を参照してください。

Installation

gh extension install github/gh-stack

拡張機能には、 GitHub CLI (gh) バージョン 2.0 以降が必要です。

メモ

gh stack拡張機能では、GitHub CLI認証が使用されます。 まだ認証していない場合は、 gh auth loginを実行します。

コマンドの概要

命令Purpose
gh stack init現在のリポジトリで新しいスタックを初期化します。
gh stack add現在のスタックの上に新しいブランチを追加します。
gh stack view現在のスタックを表示します。
gh stack checkoutスタック番号、プル要求番号、プル要求 URL、またはブランチ名でスタックをチェックアウトします。
gh stack modify現在のスタックを対話的に再構築します。
gh stack unstackローカル追跡からスタックを削除し、 GitHubでスタックを解除します。
gh stack submitすべてのブランチをプッシュしてから、GitHub上でプルリクエストとスタックを作成または更新します。
gh stack syncプル要求の状態を 1 つのコマンドでフェッチ、リベース、プッシュ、同期します。
gh stack rebaseリモートからプルし、スタック全体でカスケードリベースを実行します。
gh stack push現在のスタック内のアクティブな分岐をリモートにプッシュします。
gh stack linkローカル追跡なしで、プル要求を GitHub 上のスタックにリンクします。
gh stack merge1 つ以上のスタックされたプル リクエストを一度にマージできます。
gh stack switchスタック内の別のブランチに対話形式で切り替えます。
gh stack upトランクから離れて、スタックの上部に向かって上に移動します。
gh stack downスタックの下部、つまり幹の方へ下に移動します。
gh stack topスタックの一番上に移動します。
gh stack bottomスタックの一番下に移動します。
gh stack trunkトランク ブランチに移動します。
gh stack alias入力の手間を減らせるように、短いコマンドエイリアスを作成します。
gh stack feedback
gh stack拡張機能に関するフィードバックを共有します。

スタック管理

gh stack init

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

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

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

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

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

フラグDescription
-b, --base <branch>スタックのトランク ブランチ (既定値はリポジトリの既定のブランチ)

例:

# 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

現在のスタックの上に新しいブランチを追加します。

gh stack add [flags] [branch]

既存のスタックの場合は、現在の HEAD に新しいブランチを作成し、それをスタックの一番上に追加してチェックアウトします。このコマンドは、スタックの最上位ブランチで実行する必要があります。 ブランチ名を指定しない場合、コマンドはブランチ名の入力を求めます。

スタックに含まれていないブランチからコマンドを対話モードで実行すると、add は代わりに新しいスタックを初期化することを提案します。 指定したブランチ名または自動生成された名前が最初のレイヤーになります。 名前を指定しない場合は、標準の init プロンプトが使用されます。

必要に応じて、変更をステージングし、 add フローの一部としてコミットを作成できます。 明示的なブランチ名を指定せずに -m を指定すると、ブランチ名は日付とスラッグ形式 ( 03-24-add_login など) で自動的に生成されます。

フラグDescription
-A, --all追跡されていないファイルを含むすべての変更をステージングします。
-m が必要です。
-u, --update追跡対象のファイルのみに変更をステージングします。
-m が必要です。
-m, --message <string>ブランチを作成する前に、このメッセージを使用してコミットを作成する

メモ

-A-u は相互に排他的です。

例:

# 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

現在のスタックを表示します。

gh stack view [flags]

スタック内のすべてのブランチ、その順序、プル要求リンク、および相対タイムスタンプを持つ最新のコミットを表示します。 既定では、コマンドは対話型ターミナルで全画面表示を開き、非対話型ターミナルに静的出力を出力します。 --shortフラグと--json フラグは、どちらの環境でも標準出力に直接出力されます。

フラグDescription
-s, --short分岐ごとの 1 行の出力をコンパクト化
--jsonJSON としてスタック データを出力する

例:

gh stack view
gh stack view --short
gh stack view --json

gh stack view --short では、ターミナルが OSC 8 ハイパーリンクをサポートしている場合、プル リクエスト番号に OSC 8 ハイパーリンクを使用します。 それ以外の場合は、コピーと貼り付けの完全な URL が表示されます。 ターミナル検出をオーバーライドするには、 GH_STACK_HYPERLINKS=1 または GH_STACK_HYPERLINKS=0 を設定します。

gh stack checkout

スタック番号、プル要求番号、プル要求 URL、またはブランチ名でスタックをチェックアウトします。

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

番号だけが指定された場合、まずスタック番号またはプルリクエスト番号として解釈されます。 これらは、 GitHub UI に表示されるリポジトリ スコープの識別子です。 数値と一致するものが何もない場合は、ブランチ名として試行されます。

リモート スタックを参照すると、コマンドは GitHub上のスタックをフェッチし、分岐をプルして、スタックをローカルに設定します。 スタックが既にローカルに存在し、一致する場合、コマンドはブランチに切り替えます。 ローカル スタックとリモート スタックの構成が異なる場合は、競合を解決するように求められます。

ブランチ名を指定すると、コマンドはローカルで追跡されるスタックを最初にチェックします。 ブランチがローカルで追跡されていない場合、コマンドはリモート スタック上のブランチを検索し、一致するスタックをプルします。 複数のスタックが一致する場合は、スタックまたはプル要求番号を使用して、1 つを明示的に選択します。

対話型ターミナルで引数を指定せずにコマンドを実行すると、まず、現在のブランチがローカルで追跡されていないリモート上のスタックに属しているかどうかを確認し、チェックアウトを提供します。一意の一致がない場合、または拒否した場合は、ローカルで追跡されるスタックと GitHubにのみ存在するスタックの両方で、使用可能なすべてのスタックを一覧表示する検索可能なピッカーが開きます。 各行には、スタック番号、その一番下と一番上のブランチ、ベースブランチ、プルリクエストのうちマージ済み、オープン、クローズ、または未プッシュの件数を要約して示すステータスバー、およびそのスタックがローカルにあるかリモートにのみあるかが表示されます。 [すべて]、[ローカル]、[リモート] タブでフィルター処理するか、検索する/を入力します。 完全にマージされたスタックは省略されます。 リモートのみのスタックを選択すると、リモート専用スタックに切り替える前にローカルに複製されます。

例:

# 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
gh stack checkout feature-auth

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

gh stack modify

現在のスタックを対話的に再構築します。

gh stack modify [flags]

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

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

前提 条件

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

  1. アクティブなスタックがローカルでチェックアウトされている必要があります。
  2. 作業ツリーはクリーンな状態で、未コミットの変更がない必要があります。
  3. リベースは進行中ではありません。
  4. スタック内で、マージ待ちのプルリクエストはありません。
  5. コミット履歴は線形でなければならず、マージコミットや履歴が分岐したブランチがあってはなりません。

Operations

OperationEffect
Drop
xスタックからブランチとそのコミットを削除します。 ローカル ブランチと関連するプル要求は保持されます。
下に折りたたむ
dトランクに向かって下に、コミットをブランチに吸収します。 折りたたまれたブランチがスタックから取り除かれます。
折りたたむ
uトランクではなく、その上位のブランチにコミットを吸収します。 折りたたまれたブランチがスタックから取り除かれます。
下に挿入
iカーソル位置の下で、幹側に新しい空のブランチを挿入します。
上に挿入
トランクから離れた位置で、カーソルの上側に新しい空の枝を挿入します。
下へ移動
+ | トランクに向かって下に、ブランチを並べ替えます。 | | 上へ移動 | + | ブランチを幹から離れる方向に上へ並べ替えます。 | | 名前の変更 | r | インライン プロンプトを使用してブランチの名前を変更します。 | | Undo | Z | 最後にステージ済みの操作を元に戻します。 |

適用フェーズ

Ctrl+キーを押すと、分岐の名前の変更、新しい分岐の挿入、分岐の折りたたみまたは削除、連鎖リベースの実行によってステージングされた変更が適用され、必要なスタック状態の線形コミット履歴が作成されます。

リベースの競合が発生した場合は、次のいずれかを実行できます。

  • 競合を解決し、ファイルをステージングしてから、 gh stack modify --continue実行します。
  • gh stack modify --abortを実行して操作を中止し、スタックを以前の状態に復元します。

変更後

GitHubにプル要求のスタックを既に作成している場合は、gh stack submitを実行して更新されたブランチをプッシュし、スタックを再作成します。 古いスタックは自動的に置き換えられます。

例:

# 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としても使用できます。

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

引数を指定しない場合、コマンドはアクティブ スタック (現在チェックアウトされているブランチを含むスタック) を対象とします。 GitHubのスタックを解除し、ローカル追跡を削除します。

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

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

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

フラグDescription
--localスタックをローカルでのみ削除し、オンにしたままにする GitHub

例:

# 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上でプルリクエストとスタックを作成または更新します。

gh stack submit [flags]

スタック内のすべてのブランチに対してプル要求を作成し、ブランチをリモートにプッシュします。 プル要求を作成した後、 submit はプル要求をリンクするスタックを GitHub に自動的に作成します。 以前の送信など、 GitHubにスタックが既に存在する場合は、新しいプル要求が既存のスタックに追加されます。

スタック内のすべてのプル要求が既にマージされている場合、そのスタックは完了し、拡張できません。 その場合、submit は、未マージのブランチ用にトランクをルートとする新しいスタックを自動的に開始し、それを GitHub 上に作成して、マージ済みのスタックは変更せずそのまま残します。

対話型ターミナルで、 submit は 1 つの画面で全画面表示エディターを開きます。

  • 左側のパネル。 既定では、プル要求のないすべてのブランチが含まれます。 送信したくない項目は、Ctrl+X で選択解除します。 各プル要求は、その下のブランチに基づいて構築されるため、ブランチの選択を解除すると、その上に積み重ねられたブランチの選択も解除され、ブランチの下に依存するものが再び含まれます。 開いている、下書き、キューに入っている、またはマージされているかどうかに関係なく、既にプル要求があるブランチはコンテキスト用に表示されますが、ロックされています。 Web 上のものを編集します。
  • 右側のパネル。 対象ブランチの場合は、タイトルと説明を下書きし、pull request を開いてレビューの準備をするか、下書きとして開くかを選択します。 説明は、リポジトリの pull request テンプレートまたはコミットから事前に入力され、マークダウン プレビューが表示されます。 外部エディターで説明を編集するには、Ctrl+E キーを押します。 拡張機能では、 GH_EDITORVISUAL、および EDITOR 環境変数の最初の空でない値がその順序で使用されます。 何も設定されていない場合は、PATHで使用可能な場合はviが使用されます。 ロックされたブランチにフォーカスを設定すると、プル要求へのリンクを含む読み取り専用カードが表示されます。 o キーを押してブラウザーで開きます。

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

ブランチにすでにオープンなプルリクエストがあるものの、GitHub上にスタックがない場合は、Ctrl+B を使ってプルリクエストをスタックにまとめることができます。

エディターでは、新しいプル リクエストはデフォルトでレビュー準備完了になります。 トグルを使用して、任意の pull request を下書きに反転できます。 --auto を使用すると、--open を指定しない限り、新しいプル リクエストはドラフトとして作成されます。

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

例:

gh stack submit
gh stack submit --auto
gh stack submit --open

gh stack sync

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

gh stack sync [flags]

スタック全体を同期します。

  1. フェッチ。 origin から最新の変更を取得します。
  2. リモート スタックを調整します。 GitHub上のスタックをローカルにミラー化します。 プル要求が GitHub上のスタックに追加されると、リモートがローカル スタックの前に配置されるように、ブランチがプルダウンされ、ローカル スタックに自動的に追加されます。 ローカルスタックとリモートスタックが完全に分岐した場合(たとえば、 GitHub上のスタックに異なるプル要求が追加されている間にブランチをローカルに追加したため)、違いを解決するように求められます。 分岐スタックを参照してください。 非対話型ターミナルでは、差異があると同期は中止され、プッシュも更新も行われません。
  3.           **トランクを早送りします。** リモートの状態に合わせて、トランク ブランチを早送りします。 ブランチ同士が分岐している場合、この手順はスキップされます。
    
  4. カスケードリベース。 trunk に更新があった場合にのみ、すべてのスタックブランチを更新後の親ブランチにリベースします。 競合が検出された場合、すべてのブランチは元の状態に復元され、 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 submit実行して、gh stack modifyを使用してスタックを再作成します。 これは、GitHubとは異なり、submitはまだ送信していないブランチに対するプル要求も作成するため、syncをローカル スタックと一致させる方法です。
  • キャンセル。 ブランチをプッシュしたり、プル要求を更新したりせずに同期を中止します。

非対話型ターミナルでは、差異があると同期は中止され、ブランチをプッシュしたりプルリクエストを更新したりすることなく、正常終了します。 スタックを解除して再作成して解決します。

フラグDescription
--remote <name>リモートからフェッチしてプッシュする (既定では、自動的に検出されたリモート)
--pruneマージされたプル リクエストのローカル ブランチを削除する

例:

gh stack sync

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

gh stack rebase

リモートからプルし、スタック全体でカスケードリベースを実行します。

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
ArgumentDescription
[branch]対象ブランチ(既定は現在のブランチ)

例:

# 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

現在のスタック内のアクティブな分岐をリモートにプッシュします。

gh stack push [flags]

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

フラグDescription
--remote <name>プッシュ先のリモート (既定では、自動検出されたリモートが使用されます)

例:

gh stack push
gh stack push --remote upstream

ローカル追跡なしで、プル要求を GitHub 上のスタックにリンクします。

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

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

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

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

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

フラグDescription
--base <branch>スタックの下部のベース ブランチ (既定値はリポジトリの既定のブランチ)。 既存のスタックに追加する場合、このフラグは無視されます。
--open新規および既存の pull request をレビューの準備完了としてマークする
--remote <name>プッシュ先のリモート (既定では、自動検出されたリモートが使用されます)

例:

# 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 つ以上のスタックされたプル リクエストを一度にマージできます。

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

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

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

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

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

メモ

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

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

フラグDescription
--merge-method <method>使用するマージ メソッド: mergesquash、または rebase
--merge--squash--rebase対応するマージ メソッドの短縮形
-y, --yes確認を求めずにマージする

例:

# 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

スタック内の別のブランチに対話形式で切り替えます。

gh stack switch

現在のスタック内のすべてのブランチを位置番号付きで一覧表示する対話型ピッカーを表示します。ブランチは、上部のトランクから最も遠いものから下部のトランクに最も近いものまでの順に並びます。 ブランチを選択してチェックアウトします。

このコマンドには対話型ターミナルが必要です。

例:

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

トランクから離れて、スタックの上部に向かって上に移動します。

gh stack up [n]

nブランチを上に移動し、既定値は 1 に設定します。 トランク ブランチにいる場合は、 up 最初のスタック ブランチに移動します。

例:

# Move up one layer
gh stack up

# Move up three layers
gh stack up 3

gh stack down

スタックの下部、つまり幹の方へ下に移動します。

gh stack down [n]

nブランチを下に移動し、既定値は 1 に設定します。

例:

# Move down one layer
gh stack down

# Move down two layers
gh stack down 2

gh stack top

スタックの一番上に移動します。

gh stack top

トランクから最も遠いブランチをチェックアウトします。

gh stack bottom

スタックの一番下に移動します。

gh stack bottom

トランクに最も近いブランチをチェックアウトします。

gh stack trunk

トランク ブランチに移動します。

gh stack trunk

mainなど、現在のスタックのトランク ブランチをチェックアウトします。 スタックの一部であるブランチ上に存在する必要があります。

Utilities

gh stack alias

入力の手間を減らせるように、短いコマンドエイリアスを作成します。

gh stack alias [flags] [name]

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

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

フラグDescription
--remove以前に作成したエイリアスを削除する

例:

# 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拡張機能に関するフィードバックを共有します。

gh stack feedback [title]

フィードバックを送信できるように 、gh-stack リポジトリ でディスカッションを開きます。 必要に応じて、ディスカッション投稿のタイトルを指定できます。

例:

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

環境変数

変数Description
GH_STACK_THEME
auto (既定値)、lightdark
submitmodifyview、およびすべての色付きコマンド出力の対話型画面のカラー パレットを制御します。 色はターミナルの背景に自動的に適応します。 ターミナルが背景を報告しない場合に、この変数を設定して、SSH または tmux の設定で発生する可能性があるライト パレットまたはダーク パレットを強制的に設定します。
GH_STACK_HYPERLINKS
01ターミナルの検出が正しくない場合に OSC 8 ハイパーリンクを無効または有効にします。 サポートされていないターミナルでは、既定で完全な URL が表示されます。
# Force the light palette for one command
GH_STACK_THEME=light gh stack view

終了コード

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

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