本連載では、バージョン管理システム「Git」とGitのホスティングサービスの1つ「GitHub」を使うために必要な知識を基礎から解説しています。今回は、ブランチ作成、README.mdファイルへの変更、GitHub上のリポジトリへの反映を行って、プルリクエストを作成し、レビューやマージを行う手順を紹介します。
本連載「こっそり始めるGit/GitHub超入門」では、バージョン管理システム「Git」とGitのホスティングサービスの1つ「GitHub」を使うために必要な知識を基礎から解説していきます。具体的な操作を交えながら解説していきますので、本連載を最後まで読み終える頃には、GitやGitHubの基本的な操作が身に付いた状態になっていると思います。
前回の記事「これでもう怖くない、Git/GitHubにおけるリモートリポジトリの作成、確認、変更、更新時の基本5コマンド」では「リモートリポジトリ」に対する基本操作を解説しました。
連載第10回目の本稿では「プルリクエスト」の基本機能や手順について解説します。
本稿で解説する作業は、前回の記事で作成したリポジトリをベースに進めていきます。リポジトリを作成する作業をまだ行っていない場合は、前回の記事を読みながら準備を進めてみてください。
ブランチ作成、README.mdファイルへの変更、GitHub上のリポジトリへの反映を行って、プルリクエストを作成する準備を行います。
前回の記事で作成したリポジトリへ移動します。
$ cd /Users/hirayashingo/Documents/hello-git-9/hello-github $ pwd /Users/hirayashingo/Documents/hello-git-9/hello-github
プルリクエスト用のブランチ「edit-readme」を作成し、このブランチに切り替えます。
$ git status On branch master Your branch is up-to-date with 'origin/master'. nothing to commit, working tree clean $ git checkout -b edit-readme
カレントブランチが「edit-readme」ブランチになりました。
$ git status On branch edit-readme nothing to commit, working tree clean
「README.md」ファイルに1行追加し、git addコマンドでステージ、「git commit -m」コマンドでコミットします。
$ echo "Git連載記事の作業用のリポジトリです。" >> README.md $ cat README.md # hello-github GitHubの機能を試すためのリポジトリです。 Git連載記事の作業用のリポジトリです。 $ git add README.md $ git commit -m "リポジトリの説明をさらに追加" [edit-readme 149d3a6] リポジトリの説明をさらに追加 1 file changed, 1 insertion(+)
git pushコマンドでリモートリポジトリへ反映します。以下のコマンドを実行すると、今回行った変更がリモートリポジトリ「origin」の「edit-readme」ブランチに反映されます。
$ git push origin edit-readme Counting objects: 3, done. Delta compression using up to 8 threads. Compressing objects: 100% (2/2), done. Writing objects: 100% (3/3), 402 bytes | 0 bytes/s, done. Total 3 (delta 0), reused 0 (delta 0) To github.com:username/hello-github.git * [new branch] edit-readme -> edit-readme
これでプルリクエストを作成する準備が整いました。
ここでGitHub上のリポジトリページを表示してみましょう。以下のような表示になっているかと思います。
「Your recently pushed branches:」という表示は、メインのブランチ(今回の場合はmaster)以外のブランチがpushされた場合、しばらくの間表示されます。
「Compare & pull request」ボタンをクリックし、プルリクエスト作成ページへ移動します。
プルリクエスト作成ページを表示できました。ページの構成は以下のようになっています。
【1】ブランチ
「マージ先ブランチ」と「プルリクエスト対象ブランチ」がここに表示されます。
今回の場合、これから作成するプルリクエストが承認されると、「edit-readme」ブランチの内容が「master」ブランチへマージされることになります。
【2】タイトル
プルリクエストのタイトルをここに入力します。
今回のようにプルリクエストの対象となるコミットが1つだけの場合、タイトルの初期値はコミットコメントになります。
【3】概要
変更内容、関連するイシューや資料へのリンクなど、レビュー担当者(プルリクエストを確認する人)へ伝えておきたいことをここに書きます。
Markdown形式で記述すれば、文章を構造化することができます。
【4】「Create pull request」ボタン
このボタンを押すとプルリクエストが作成されます。
【5】コミットの履歴
プルリクエストの対象となるコミットがここに表示されます。
【6】ファイルの差分
ファイルの変更箇所が、ここに表示されます。README.mdファイルに1行追加したことがよく分かるかと思います。
今回は以下のように、見出しとリスト項目1件をMarkdown形式で記入しました。
「Preview」をクリックすると、どのように描画されるかを確認できます。
「Create pull request」ボタンクリックしてプルリクエストを作成します。
プルリクエストの作成が完了しました。作成したプルリクエストのページが表示されます。
プルリクエストを作成する作業の解説は以上です。
プルリクエストをレビューする人の視点からプルリクエストのページを見ていきます。
まずは、デフォルトで表示される「Conversation」タブの内容を解説していきます。
ページの構成は以下のようになっています。
【1】タイトル
プルリクエストのタイトルが1番上に表示されます。変更の内容がすぐに理解できるタイトルだとうれしいですね。
【2】ブランチ
ここを見ると、どのブランチからどのブランチへマージされるのかが分かります。
【3】タブ
デフォルトで「Conversation」タブが選択されています。「Commits」と「Files changed」タブについては後ほど解説します。
【4】概要
ここを見ると、より詳しいプルリクエストの情報を知ることができます。
【5】各種ログ
ここを見ると、プルリクエストに関連する各種ログを確認できます。今回の場合は、コミット1件のログだけ表示されています。
【6】「Merge pull request」ボタン
このボタンを押すとマージが実行されます。今回の場合は、「edit-readme」ブランチの内容が「master」ブランチへマージされます。
【7】コメント欄
ここのテキストボックスにコメントを記入し、「Comment」ボタンをクリックするとコメントを追加できます。プルリクエスト作成時の「概要」と同様に、Markdown形式で記述できます。
コメント機能は、プルリクエストに関わる人同士のさまざまなコミュニケーションのために使用できます。例えば以下のようなコメントを書き込むことができます。
このタブを選択すると、プルリクエストの対象となるコミットの一覧を表示できます。
このタブを選択すると、ファイルの変更箇所を確認できます。
プルリクエストをレビューする作業の解説は以上です。
誰がプルリクエストをマージするかは、開発チームのルールによります。
筆者が所属するチームの場合、プルリクエストは以下のフローで行うことが多いです。
今回は1人チームなので、自分でマージしてしまいましょう。「Merge pull request」ボタンをクリックしてください。
マージ確認状態になります。マージして問題なければ「Confirm merge」をクリックします。
マージが完了しました。
「Delete branch」をクリックすると、プルリクエストに使用した「edit-rename」ブランチを削除できます。このブランチはもう不要なので「Delete branch」をクリックしてブランチを削除します。
ブランチの削除が完了しました。
プルリクエストをマージする作業の解説は以上です。
本稿では「プルリクエスト」の基本機能やフローを解説しました。今回扱うことができなかったプルリクエストの他の機能などは、また別の機会に紹介する予定です。
次回は「GitHub Issues(イシュー)」を解説する予定です。お楽しみに!
クラスメソッド株式会社 iPhoneアプリサービス事業部所属のプログラマーです。iOSアプリの開発がメインですが、デザインやAWSなども勉強中です。
ブログ:http://dev.classmethod.jp/author/hiraya-shingo/
Copyright © ITmedia, Inc. All Rights Reserved.