GitHub:プルリクを手元にチェックアウトできない
プルリクが開かれると、GitHub はその変更をすべてリモートに持ちます。プルリクのコミットはマージの前からリポジトリにあるので、作った人がフォークを消していても、プルリクは番号でフェッチできます。ブランチのほうは無いことがあります。ほかの人のフォークにある、マージや閉じた後に手で消された、マージの後に自動で消された、のどれかです(GitHub の説明「プルリクを手元でチェックアウトする」・2026年10月26日に確認)。
git fetch origin pull/ID/head:BRANCH_NAME git switch BRANCH_NAME // refs/pull/ は読み取り専用:! [remote rejected] HEAD -> refs/pull/1/head (deny updating a hidden ref)
ブランチの行き先
- フォークにある:フォークからのプルリクは、比べるブランチがフォークにあり、クローンしたリポジトリにはありません。作った人が応じない、またはフォークを消した場合でも、変更は新しいプルリクでマージできます。
- マージの後に消された:書き込みの権限がある人は、マージ済みか閉じたプルリクのブランチを、ほかの開いたプルリクが使っていなければ消せます。開いたプルリクのブランチは消せません。リポジトリの設定で、マージの後に head のブランチを自動で消すこともできます(GitHub の説明「プルリクのブランチを消す・戻す」と「ブランチの自動の削除を管理する」)。
- フォークと自動の削除:フォークから開いたプルリクでは、GitHub はフォークの「Automatically delete head branches」の設定を使い、マージした人がフォークに書き込めるときだけブランチを消します(マージの後にブランチが消えないを参照)。
代わりにプルリクをフェッチする
- 番号で:
git fetch origin pull/ID/head:BRANCH_NAMEで、プルリクの番号の参照を新しい手元のブランチへフェッチし、そのブランチに切り替えます。テストを走らせたり、ほかのブランチをマージしたりでき、新しいブランチとして push して、新しいプルリクを作れます。 - GitHub CLI で:
gh pr checkout PULL-REQUESTには、プルリクの番号・URL・head のブランチを渡せます。 - 読み取り専用:リモートの
refs/pull/は読み取り専用です。そこへコミットを push するとdeny updating a hidden refで断られるので、自分のブランチを push します。 - リモート:リモートを消したり名前を変えたりしても、手元の
refs/pull/origin/には響きません。
直す所
- ブランチを戻す:閉じたプルリクのページの下のほうの Restore branch で、消された head のブランチを戻せます。
- フォークのブランチにコミットする:個人のアカウントのフォークからプルリクを作った人が「Allow edits from maintainers」を選ぶと、元のリポジトリに push できる人なら誰でも、比べるブランチにコミットできます。フォークに GitHub Actions のワークフローがあると、この項目は「Allow edits and access to secrets by maintainers」になり、メンテナーがフォークのワークフローも書き換えられるようになります(GitHub の説明「フォークから作ったプルリクのブランチへの変更を許す」・フォークのプルリクのブランチに push できない)。
- それ以外:プルリクを番号でフェッチし、自分のブランチを push して、その変更で新しいプルリクを開きます。
IntelliJ IDEA では「Fetch failed」か、画面に何も出ない
IntelliJ IDEA に入っている GitHub の機能がプルリクをどうチェックアウトするか。ソース(2026年10月30日に確認・IntelliJ IDEA:GHPRBranchesViewModel.kt・GitRemoteBranchesUtil.kt・hostedGitRepositoryRemote.kt・GHPRReviewBranchStateSharedViewModel.kt・GHPROnCurrentBranchService.kt)では:
- Checkout Branch(「Fetch and checkout the pull request branch」)は、元のブランチを、それがあるリポジトリから名前で取ってきます。
pull/ID/headではありません。マージの後に消されたブランチはこの形では取れず、IDE には「Fetch failed」と Git の理由が出て、何もチェックアウトされません。上のとおり番号で取ってきます。 - フォークからのプルリクは、フォークそのものから取ってきます。フォークを指すリモートがあればそれを使い、無ければフォークの持ち主の名前でリモートを足し(
originが HTTP か HTTPS なら HTTPS、それ以外は SSH)、手元のブランチがまだ追跡していなければfork/OWNER/BRANCHとしてチェックアウトします。リモートを見つけることも足すこともできないと「Branch checkout failed」と「Cannot resolve git remote for merge request source repository」(元のリポジトリの git のリモートが分からない)が出ます。 - GitHub がプルリクの元のリポジトリを返さないとき(GitHub の GraphQL の API ではこの欄は空になり得ます)は、取ってくる前に止まります。ソースは IDE のログに警告を書くだけで、画面には何も出ません。上のとおり番号で取ってきます。
- チェックアウトした後は、今のブランチが「#ID on BRANCH」と出ます。プルリクの最後のコミットが手元のブランチの履歴に無いとき(作者がまた push した後など)は「Pull request #ID exists for current branch BRANCH, but local branch is out of sync with remote」(手元のブランチがリモートとずれている)と出て、Update の操作でもう一度取ってきてチェックアウトします。
IntelliJ IDEA で GitHub のプルリクを見るなら
Lesstep の Pull Request Inbox for GitHub は、JetBrains IDE(2024.1 以降)のプラグインです。プルリクのレビュー・チェック・会話を差分の隣に出し、対象のブランチが許す方法でマージします。「チェックアウト」はプルリクのブランチをフェッチしてチェックアウトします。フォークからのプルリクや、フォークが消されたプルリクでは、refs/pull/NUMBER/head を pr/42-fix-login のようなプルリクの番号つきの手元のブランチへフェッチします。このブランチには upstream を付けないので、push では GitHub に無いブランチでなく、同じ名前の新しいブランチを勧めます。プルリクのブランチが GitHub で消されていて、手元にも同じ名前のブランチが無いときも同じようにし、そう知らせます。受信箱・差分・会話は無料、承認・コメント・解決・マージは Pro(月 US$1.50・30日間の無料試用つき)です。画面は日本語です。
GitHub は GitHub, Inc. の商標、IntelliJ IDEA は JetBrains s.r.o. の商標です。このページは GitHub, Inc.・JetBrains のいずれとも提携しておらず、承認も受けていません。
ほかに:GitHub のマージの断り(405・409) · GitHub のレビューの断り(422) · GitHub の検索の 422「Validation Failed」 · 「Resource not accessible by personal access token」 · 401「Bad credentials」 · 「Resource protected by organization SAML enforcement」 · 「API rate limit exceeded」 · GitHub の差分の 406「too_large」・3,000件 · GitHub の行のコメントの 422「must be part of the diff」 · GitHub のブランチの更新の断り(422) · GitHub のプルリクが作れない(422・403) · GitHub の自動マージの断り · GitHub の下書き・レビュー準備完了・閉じるの断り · GitHub の会話の解決の断り · GitHub のチェックが出ない(check runs の 403) · GitHub のファイルの中身が読めない · GitHub の比較の断り(404・422) · GitHub のコメント・返信の断り(ロック・アーカイブの 403) · GitHub のマージの方法の断り(405) · GitHub のブランチが見つからない(404・301) · GitHub Enterprise Server につながらない · GitHub のレビューの依頼が出ない · GitHub のプルリクの一覧が足りない · GitHub の 404・名前を変えたリポジトリ(301・307) · GitHub の行のコメントが outdated・差分に無い · GitHub のプルリクの更新・通知が遅い · GitHub の変更の提案が適用できない · GitHub の必須チェックが Expected のまま · GitHub でコードオーナーのレビューが要る · GitHub で未解決の会話がマージを止める · GitHub で署名の無いコミットがマージを止める · GitHub のマージキューでマージするブランチ · GitHub でマージが最後の push の承認を待っている · GitHub でマージがコードスキャンの結果を待っている · GitHub でマージがコード品質の結果を待っている · GitHub でコードのカバレッジの水準がマージを止める · GitHub でライセンスの適合の結果がマージを止める · GitHub でブランチのロックや更新の制限がマージを止める · GitHub でマージの後にブランチが消えない · GitHub でチームの承認(Required reviewers)がマージを止める · GitHub でシークレットスキャンのアラートがマージを止める · GitHub でスタックしたプルリクがマージできない · GitHub で push の規則が push を止める · GitHub でコミットのメタデータの規則がマージを止める · GitHub で強制 push が止められる · GitHub でプルリクをマージしても issue が閉じない · GitHub のプルリクがマージ先と衝突している · GitHub で変更を依頼された・レビューを取り消す · GitHub で共同作者がコミットに数えられない · GitHub で依存関係のレビューのチェックが失敗する · GitHub で Dependabot がプルリクをリベースしない · GitHub でフォークが同期できない · GitHub でプルリクのベースのブランチを変えられない · GitHub でプルリクを取り消せない · GitHub でプルリクのテンプレートが出ない · GitHub でプルリクにラベルや担当者が付かない · GitHub でプルリクを閉じられない・開き直せない · GitHub でプッシュ保護にプッシュを止められた · GitHub でプルリクのコメントが隠された · GitHub でデプロイが成功するまでプルリクをマージできない · GitHub でチームに頼んだレビューがメンバーに置き換わった · GitHub でプルリクのファイルの Viewed が外れた · GitHub でマージしていないプルリクがマージ済みになった · GitHub で Copilot のレビューが承認に数えられない · GitHub でワークフローが作ったプルリクのチェックが動かない · GitHub でプルリクに Update branch のボタンが出ない · GitHub で Dependabot のプルリクのチェックが失敗する · GitHub でフォークからのプルリクのチェックが失敗する · GitHub でコミットメッセージの [skip ci] でチェックが動かない · GitHub で保存期間を過ぎてチェックが消えた · GitHub の公開リポジトリのコードレビューの制限 · GitHub でリポジトリのプルリクがオフ・制限されている · GitHub でスタックのプルリクごとにチェックが走る · GitHub でスカッシュでマージ済みのコミットが次のプルリクに出る · GitHub のプルリクでファイルの差分が出ない · GitHub でフォークのプルリクのブランチに push できない · GitHub のプルリクのチェックが取り消された · GitHub で Rebase and merge が使えない · GitHub のマージのコミットメッセージが思った形にならない · GitHub のプルリクでファイルの全行が変わったと出る · GitHub の API がタイムアウトした · GitHub のプルリクで画像や文書の差分が見た目で出ない · GitHub のレビューの依頼が断られる(422) · GitHub で Copilot が作ったプルリクのチェックが動かない・承認が数えられない · GitHub の push が GH006・GH013 で断られる · GitHub で承認が足りずマージできない・数に入らない承認 · JetBrains の IDE で GitHub のプルリクを扱う · English