基本操作②: ブランチを使用した並行開発
Gitでの並行開発
複数人での開発では、其々のメンバーが同時並行して別々に機能を開発したり、開発している途中で急遽別の機能を割込みで開発したりします。
つまり最新のプログラムが複数ある状態になるということです。
Gitにはブランチという機能があります。
ブランチとは枝という意味ですが、その名前の通り枝葉のように分岐して作業を出来るようにします。
この様にブランチを切ることで他の人の作業に影響を受けることも与えることもなく別の作業が進められます。
また、ブランチでの作業が終了したら、その変更点をもとのブランチにマージすることで、一つのメインのブランチに変更を反映することが出来ます。
それでは、実際にGitを操作しながらブランチを使用した並行開発を行ってみましょう。
ブランチの一覧表示
まずはブランチの状態がどのようになっているかを確認してみます。
ブランチの一覧表示と現在操作しているブランチを確認するコマンドのgit branch を実行します。
$ git branch * master
現在はmasterブランチだけがあるということと、* マークがついているのが現在のブランチということがわかります。
また、Gitでリポジトリを作成すると最初に作成されるのがmasterブランチです。
その為、一般的にこのmasterブランチをメインのブランチとして作業が進められていきます。
このような複数のブランチの分岐元となり、投稿先となるメインのブランチを統合ブランチと呼びます。
統合ブランチは常にリリース可能な状態に保つようにマージやコミットをしながら運用していくことで安定した並行開発を行っていきます。
ブランチの作成と切替
それでは並行開発をする為に新しいブランチを作成してみましょう。
git branch <ブランチ名> を実行することでブランチの作成をすることが出来るのですが、ブランチの切替えコマンドの git checkout に -b オプションを付けることで、ブランチの作成と切替を同時にすることが出来るので、一般的にはこちらを使用します。
$ git checkout -b feature-add-name Switched to a new branch 'feature-add-name'
そして、現在のブランチを確認してみましょう。
$ git branch * feature-add-name master
そうすると feature-add-name ブランチが新たに作成されて、こちらを選択している状態になっています。
この状態でコミットをしていくと、feature-add-name だけに変更履歴を保存していくことができます。
このようにブランチは機能ごとや不具合ごとなど改修作業の単位で作成されていくことになります。
この作業の為に分岐したブランチをトピックブランチと呼び、基本的には修正のトピック毎に分岐されその改修のみが加えられれます。
そして改修が終われば統合ブランチにマージしていきます。
そのため、feature-add-nameは名前を追加する以外の作業はしてはいけないブランチです。
他の作業がしたい場合はまた別のブランチを作成して作業します。
また、このように機能的なトピックで分岐されるブランチは後述で説明するgithub-flowというメジャーな運用方法に従って feature-xxxというブランチ名を付けることが多いです。
トピックブランチの更新
それでは feature-add-nameブランチを変更していきます。
そしてこれをコミットします。
$ git add . $ git commit -m "add name" [feature-add-name d42c383] add name 1 file changed, 2 insertions(+), 1 deletion(-)
ここで master ブランチに切り替えてみましょう。
$ git checkout master Switched to branch 'master'
そうすると、index.htmlの内容が元に戻りました。
feature-ass-nameブランチでの作業はmasterブランチに影響を与えていません。
このようにブランチを複数に分けて作業をすることでお互いに影響を受けることなく同時並行して作業をすることが可能になります。
ブランチのマージ
ではfeature-add-nameをmasterにマージします。
masterブランチに切り替えた状態でgit mergeコマンドを実行します。
コマンドは git merge <マージしたいブランチ> です。
$ git merge feature-add-name Updating 51d05e5..d42c383 Fast-forward index.html | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
index.htmlを確認するとfeature-add-nameの内容が反映されています。
これでマージが完了しました。
このようにして開発したい内容ごとに統合ブランチからトピックブランチを作成し、他の人の作業に影響を受けずに同時並行して作業をすることを実現します。
この動画はテスト動画です、あまり気にしないでください(笑)