目的
開発を進めるにあたり、GitHubを使用しています。
チームで開発するにせよ個人で開発するにせよ、1つのブランチでゴリゴリ開発を進めるのではなく、機能ごとにブランチを作成して開発を進めましょう。
- ブランチについて理解する
- 新しいブランチを切る
- 編集内容を現在のブランチにプッシュする
- 親ブランチにプルリクエストを送る
- 親ブランチはプルリクエストを受け入れ、編集内容をマージする
手順
ブランチについて理解する
開発を開始する前に、ブランチについて理解しましょう。
今回は下記のようなブランチ構成で仕事を進めていきます。
GitHubではフォルダのブランチを作成することで、開発中のデータをマスターデータに上書きしないようにします。
master
は最終的な実運用に使用するフォルダです。ここからブランチを派生させます。
development
ブランチはテスト運用に使用するフォルダです。各個人が編集したファイルを集約させ、正しく動作するかを確かめます。このブランチをdefaultに設定します。
個人の作業ブランチ
は個人がおこなった作業を保存するファイルです。ブランチ名で作業内用が分かると良いでしょう。
ローカル
は各個人のPCのことです。
新しいブランチを切る
# 現在のブランチを確認する(* がついてるのが現在のブランチ)
$ git branch
* development
master
# 新しいブランチを作成する
$ git checkout -b hello-A
Switched to a new branch 'hello-A'
# 現在のブランチを確認すると、新しく作成したブランチに移動している
$ git branch -a
* hello-A
development
master
ブランチを削除する場合は
ブランチを削除する場合は、下記コマンドを実行します。
$ git branch -d <ブランチ名>
編集内容を、現在のブランチにプッシュする
まずはファイルを適当に編集します。
<body>
<h1>Hello! A</h1> <!-- 編集内容 -->
<%= yield %>
</body>
編集内容を現在のブランチにプッシュします。
$ git add .
$ git commit -m "add h1 A"
$ git push -u origin hello-A
push先はorigin <ブランチ名>
とします。
教材通りにorigin master
としないことに注意!
親ブランチにプルリクエストを送る
変更内容を親ブランチ(今回の場合はdevelopment
)に受け入れてもらうようにお願いすることをプルリクエストを言います。
GitHubに編集内容をプッシュすると、レポジトリ画面に次のような表示がでます。
Compare & pull request
ボタンを押すと、編集内容を記入するように求められます。
この欄ではマークダウン方式で記載します。
過去のcommit内容を見ながら書くと、どんな編集をしたかが分かりやすいです。
記載したらCreate pull request
ボタンを押すとプルリクエストの送信が完了です。
レポジトリオーナーのマージを待ちましょう。
レポジトリ所有者が親ブランチにマージする(プルリクエストを受け入れる)
プルリクエストを受け取ると、下図のようなお知らせが届きます。
Merge pull request
ボタンを押して、プルリクエストの内容を確認しましょう。
内容を確認したら、Confirm merge
ボタンを押して編集内容をマージします。
マージが成功すると下図のような表示に変更されます。
古いブランチはもう使わないのでDelete branch
ボタンで削除してしまいましょう。
ローカルのdevelopmentブランチを最新版にする
GitHubの内容をローカルに反映させます。
ターミナルで
# developmentブランチに移動する
$ git checkout development
=> ローカルファイルは編集される前の状態に戻る
# ローカルのgitをoriginにある状態に揃える
$ git fetch
# 最新版のdevelopmentブランチをpullして反映させる
$ git pull origin development
以上で、ローカル上のファイルが最新版となりました。
以降、また別のブランチを切って開発を進めていきましょう。
まとめ
以上で新しくブランチを切り、編集内容を親ブランチにマージすることができました。
これまでの3記事で、とりあえず開発を進めることは可能です。
しかし複数人で開発を進めるにあたり、異なるブランチで同一のファイルを編集したときのプルリクはどうなるのでしょうか?
次回は
- 異なるブランチで同一ファイルを編集したとき(コンフリクト)の対処法
について紹介する予定です。