ブランチの運用
ブランチの運用
Gitは、自由にブランチを作成可能。
しかしあらかじめ運用ルールを設ける必要がある。
●統合ブランチ
リリース版が何時でも作成可能。トピックブランチの分岐元。
安定した状
態を保つ必要がある。通常materブランチを統合ブランチとして使用。
●トピックブランチ
機能追加やバグ修正といった作業を行うために作成するブランチ。
複数の課題がある場合は、その数だけトピックブランチが作成する。
ブランチの切り替え
作業するブランチを切り替えるにはチェックアウトという操作を行う。
HEAD
HEADとは、現在使用しているブランチの先頭を表す名前。
デフォルトではmasterの先頭を表す。
stash
まだコミットしていない変更内容や新しく追加したファイルが、インデックスやワークツリーに残ったままで、他のブランチへのチェックアウトを行うと、その変更内容は元のブランチから、移動先のブランチへ移動。
作業完了したトピックブランチは、最終的に統合ブランチに統合する。
統合方法は二つ。
merge、rebaseの2種類。
図のようにmasterブランチから分岐するabcブランチがある。
merge
abcブランチをmasterブランチにマージ。
masterブランチの状態が以前から変更ないなら、簡単にマージ可。
ファストフォワードができる。
ファストフォワードとは、違うブランチと、競合防ぐためマージをする直前に最新のdevelopからプルをする事
実行後
しかし、masterの履歴がabcを分岐したときより進んでしまった場合。
これは、masterの変更内容とabcの変更内容を1つにまとめる必要アリ。
そのため、両方の変更を合算したマージコミットが作成する。
rebase
merge例と同時にmasterから分岐するabcブランチがある。
rebaseを使うと下の図に
rebaseすると、abcの履歴が一本化する。
この時、移動するコミットXとYでは競合が発生する場合は、それぞれのコミットで発生した競合箇所を修正する必要あり。
rebaseしただけだと、masterの先頭の位置はそのまま。そのため、masterからabcをマージして、abcの先頭まで移動させる。
・merge
変更内容の履歴はそのまま残るが、履歴が複雑になる。
・rebase
履歴は単純になるが、元のコミットから変更内容が変更される。そのため、元のコミットを動かない状態にしてしまうことがある。
- トピックブランチに統合ブランチの最新のコードを取り込む場合はrebaseを使う
- 統合ブランチにトピックブランチを取り込む場合は、まずrebaseしてからmerge