概要
複数人の開発者がgitを利用して開発する時、複数の開発ブランチを作成し、ブランチを平行運用するのが一般的である。最終的に複数のブランチは一つのブランチへとマージされる必要がある。ここでは、複数の開発ブランチを最終的に一つのブランチにマージするときのマージ方法について考えてみる。
基本的なマージ方法とその課題
例えばmasterブランチから派生させた複数の開発ブランチdev1,dev2,dev3をそれぞれ別の開発者が修正し、最終的にmasterブランチにマージする際、図1の手順でマージしたことはないだろうか?
図1
単純で分かりやすいマージ方法のため、git初心者の方は一度はこの方法でマージしたことがあると思う。しかし、このマージ方法には欠点がある。それは、他人の修正を上書きして消してしまうことがある。
図1の例だと、dev1が最初にmasterにマージされているので、dev2が先にマージされたdev1の修正を上書きして消してしまう、もしくはdev3が先にマージされたdev1やdev2の修正を上書きして消してしまうことがある。
他人の修正を消さないためのマージ方法
他人の修正を消さないようにマージするためには、図2のようにマージしたいブランチの修正を最初にマージするような方法を取る。
図2
図2の例だと、dev2をmasterにマージする前にmasterにマージされたdev1の修正がdev2にマージされる。dev3をmasterにマージする前にdev1とdev2の修正がdev3にマージされる。dev1,dev2,dev3ブランチの修正は確実に消えることなくmasterブランチにマージされる。
残る課題
図2のようなマージ手順であれば、複数の開発者が複数のgitブランチを平行開発していても、他人の修正を上書きして消してしまうことはない。しかしながらマージする回数が増えてしまうため、その分マージにかかるコストが増える。
そこで、図2のマージ手順を自動化したgitmergeというシェルスクリプトを書いてみた。インストール方法や利用方法は複数のgitブランチのマージを自動化するgitmergeで紹介している。