Skip to main content

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

だれかが自分のリポジトリのフォークまたはブランチからプルリクエストを送信してきた場合は、それをローカルでマージして競合を解決したり、GitHub でマージする前に変更をテストして確認したりできます。

Platform navigation

Tool navigation

メモ

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

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

  1. リポジトリ名の下にある [Pull requests] をクリックします。

    リポジトリのメイン ページのスクリーンショット。 水平ナビゲーション バーでは、[pull request] というラベルが付いたタブが濃いオレンジ色の枠線で囲まれています。

  2. pull request の一覧で、変更する pull request をクリックします。

  3. pull request を開く場所を選択するには、 Code ドロップダウンを選択し、いずれかのタブをクリックします。

pull request タイトルのスクリーンショット。 ドロップダウン メニューを示す矢印が付いたボタン ("コード" というラベル) は、濃いオレンジで囲まれます。

メモ

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. リポジトリ名の下にある [Issues] または [Pull requests] をクリックします。

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

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

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

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

  4. [ターミナル][ターミナル][Git Bash] を開きます。

  5. ID 番号を元に、プルリクエストへの参照をフェッチします。この過程で、新しいブランチが作成されます。 pull request 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'

ヒント

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