GitホスティングサービスGitHubの特徴的な機能のひとつであるプルリクエスト(Pull Requests)の概要と送り方について解説します。他人のリポジトリのコピーを自分のリポジトリとして作成するフォークと合わせて使われる機能で、フォーク元に変更を反映させるためには基本的にプルリクエストを送り管理者に変更内容を承認してもらう必要があります。
目次
プルリクエスト(Pull Requests)とは
プルリクエスト(Pull Requests)はフォーク元のリポジトリ(親リポジトリ)に変更を反映させるためのリクエストを行う機能です。文字どおりフォーク元に対して自分のリポジトリからのプル(pull)をリクエストします。
GitHubでリモートリポジトリをフォーク(Fork)する方法
親リポジトリはコミット権限がなければ変更を反映することはできないため内容を勝手に変更することはできません。親リポジトリに変更を反映するには権限を与えてもらうか、プルリクエストを送って管理者に変更を承認してもらう必要があります。
そのためGitHubを用いたチーム開発ではフォークとプルリクエストをセットで使うのが一般的で、開発者それぞれが自分のリポジトリで開発を進めた後、責任者が内容を確認したうえで変更を反映させるという流れになります。
親リポジトリへの変更反映にプルリクエストを介することでバグを未然に発見しやすくなるだけでなく、各開発者による親リポジトリの強制的な書き換え(push -f)や、衝突(コンフリクト)が発生した場合の意に添わぬ形での解消などを防止することができるのです。
プルリクエスト(Pull Requests)の送り方
それでは実際にプルリクエストを作成して送ってみましょう。
今回はあらかじめ自分のリモートリポジトリ(子リポジトリ)に変更内容をプッシュしておきました。この変更内容をフォーク元に反映してもらうためにプルリクエストを送ります。
GitHubの自分のリモートリポジトリのページを開き、「New Pull Request」ボタンをクリックします。
画面下部でコミット履歴とファイルの変更箇所(差分)が確認できます。問題なければ「Create pull Request」ボタンをクリック。
プルリクエストの作成ページです。
- 「マージ先ブランチ」←「プルリクエスト対象ブランチ」
- プルリクエストのタイトル
- コメント欄。変更内容や資料へのリンクなどレビュー担当者(プルリクエストを確認する人)に伝えておきたいことを記載します。
必要な項目の入力が完了したら「Create pull Request」ボタンをクリックします。これでプルリクエストの作成と送付が完了しました。
マージプルリクエスト(Merge Pull Requests)
前述の通りプルリクエストを送っただけでは変更内容は親リポジトリに反映されません。プルリクエストで送った変更内容を反映させるにはコミット権限を持つレビュー・マージ担当者がマージプルリクエスト(Merge Pull Requests)をする必要があります。
マージプルリクエスト(Merge Pull Requests)の流れを見てきましょう。
親リポジトリのGitHubページを開き「Pull Requests」タブをクリックすると現在承認待ちのプルリクエスト一覧が表示されるので、マージするプルリクエストを選択します。
上記のような画面が開かれます。
- プルリクエストのタイトル
- どのブランチからどのブランチへマージされるのか
- 各タブをクリックするとそれぞれの画面に遷移します。詳しくは後述します。
- プルリクエストの概要が表示されます。
- このプルリクエストに関連する各種ログ
- 「Merge pull request」ボタンです。このボタンを押すとマージが実行されます。
- コメント欄。このプルリクエストに対するコメントを書き込むことができます。
このままマージしてしまうこともできますが、まずはプルリクエストの内容を確認してみましょう。
「Commits」タブではプルリクエストの対象となるコミットの一覧を表示できます。ここから各コミットの内容をさらに詳しくチェックすることができます。
「Files changed」タブではファイルの変更箇所を確認できます。
レビュー・マージ担当者はこれらを確認して問題がなければマージプルリクエストを行います。
それでは実際にマージプルリクエストを行ってみましょう。「Conversation」タブを開き「Merge pull request」ボタンをクリックします。
確認画面が表示されるので問題なければ「Confirm merge」をクリックします。これでプルリクエストされた変更内容を親リポジトリにマージすることができました。