Skip to main content

プルリクエストをローカルでチェック アウトする

誰かがリポジトリのフォークまたはブランチから pull request を送信した場合、ローカルでマージして、マージの競合を解決するか、GitHub でマージする前に変更をテストおよび検証できます。

この機能を使用できるユーザーについて

Anyone with write access to a repository can pull a remote pull request down locally.

Platform navigation

Tool navigation

Note

Pull request の作成者は、アップストリーム リポジトリ メンテナ、またはアップストリーム リポジトリに対するプッシュ アクセス権を持つユーザーに、ユーザー所有のフォーク内の pull request の比較ブランチにコミットするアクセス許可を付与することができます。 詳しくは、「フォークから作成されたプルリクエストのブランチへの変更の許可」をご覧ください。

アクティブなプルリクエストをローカルで修正する

Note

GitHub CLI の詳細については、「GitHub CLI について」を参照してください。

pull request をローカルでチェックアウトするには、gh pr checkout サブコマンドを使用します。 PULL-REQUEST を、pull request の番号、URL、またはヘッド ブランチで置き換えます。

gh pr checkout PULL-REQUEST

アクティブではないプルリクエストをローカルで修正する

pull request の作成者が要求に応答しない場合、または自分のフォークを削除した場合でも、その pull request で提案された変更は新しい pull request を介してマージできます。 一方、プルリクエストを変更したくても作者が応答しないという場合、プルリクエストを更新するには追加的な手順を踏まなければなりません。

pull request が開かれると、GitHub はすべての変更をリモートで保存します。 つまり、プルリクエストがマージされる前でも、プルリクエストのコミットはリポジトリで利用できます。 オープンなプルリクエストをフェッチして、自分のものとして再作成できます。

誰でも、以前にオープンされたプルリクエストを使って、さらに作業を進めたり、テストしたりできます。そこへ変更を追加して新しいプルリクエストをオープンすることもできます。 ただし、プルリクエストをマージできるのは、プッシュアクセスを持つコラボレータだけです。

  1. リポジトリ名の下で、 [イシュー] または [pull request] をクリックします。

    リポジトリのメイン ページのスクリーンショット。 水平ナビゲーション バーの [Issues] と [Pull requests] タブが、オレンジ色の枠線で囲まれています。

  2. [Pull Requests] リストで、マージしたいプルリクエストをクリックします。

  3. アクティブではないプルリクエストの ID 番号を検索します。 ID 番号は、プルリクエストのタイトルの後に付いている数字です。

    pull request のタイトルのスクリーンショット。 pull request の ID 番号が濃いオレンジ色の枠線で囲まれています。

  4. [Git Bash] を開きます。

  5. ID 番号を元に、プルリクエストへの参照をフェッチします。この過程で、新しいブランチが作成されます。

    git fetch origin pull/ID/head:BRANCH_NAME
    
  6. このプルリクエストに基づく新しいブランチに切り替えます。

    [main] $ git switch BRANCH_NAME
    > Switched to a new branch 'BRANCH_NAME'
    
  7. これで、このブランチに対して任意の操作を実行できます。 ローカルテストを実行するか、他のブランチをブランチにマージすることができます。

  8. 準備ができたら、新しいブランチをプッシュできます。

    [pull-inactive-pull-request] $ git push origin BRANCH_NAME
    > Counting objects: 32, done.
    > Delta compression using up to 8 threads.
    > Compressing objects: 100% (26/26), done.
    > Writing objects: 100% (29/29), 74.94 KiB | 0 bytes/s, done.
    > Total 29 (delta 8), reused 0 (delta 0)
    > To https://github.com/USERNAME/REPOSITORY.git
    >  * [new branch]      BRANCH_NAME -> BRANCH_NAME
    
  9. 新しいブランチで新しい pull request を作成します。

エラー: 一部の ref をプッシュできませんでした

リモートの refs/pull/ 名前空間は "読み取り専用" です。 ここにコミットをプッシュしようとすると、以下のエラーが表示されます。

! [remote rejected] HEAD -> refs/pull/1/head (deny updating a hidden ref)
error: failed to push some refs to 'git@github.local:USERNAME/REPOSITORY.git'

Tip

リモート参照の削除または名前変更を行っても、ローカルの refs/pull/origin/ 名前空間は git-remote の呼び出しの影響を受けません。