マージ

ブランチを作成して、そこで作業を進めていき作業が終わったら、その作業をmasterブランチなどの他のブランチに作業(コミット)を統合します。

このブランチ同士の統合のことをマージと言います。

仕組み

マージには2種類あります。

ひとつは、fast-fowardのマージと、fast-forwardではないマージです。

fast-forwardのマージでは、例えばmasterブランチから作ったfeatureという名前のブランチがあり、そのブランチにコミットをして作業が終わり、masterブランチにマージしたいとなり、マージをした時に、masterブランチにコミットしていたかなのようにマージされます。

そのため、git logなどで履歴を確認した時に、featureというブランチがあったことは記録されません。

fast-forwardではないマージは、fast-forwardのマージと違い、featureというブランチがあったということが記録されます。

私の感じ方としては、fast-forwardではないマージを使うことが多いように感じます。

マージをする

ここでは、masterブランチにmasterブランチから枝分かれしたfeatureという名前のブランチをマージしてみましょう。

Gitでマージをするには、まずgit checkoutでマージ先のブランチ(master)に移動します。

その後、次のコマンドでマージを開始します。

git merge feature

このマージは、fast-forwardのマージで、fast-forwardではないマージは次のようにします。

git merge --no-ff feature

マージの際には、コミットと同様にメッセージを残す必要があります。

そのため、マージのコマンドを実行すると、メッセージを入力する画面が表示され、そこにマージのメッセージを入力します。

あらかじめ、適切なメッセージが入力されているので、変更せずにそのまま保存して構いません。

保存は、開かれるエディタにもよりますが、基本はviというエディタが起動すると思います。viは操作が独特なので、保存と終了方法を紹介します。

viが自動で起動するので、起動したら「:wq」と入力してエンターキーを押します。入力は、左下で確認でき、「w」が保存、「q」が終了を表します。最初の「:」を忘れないようにしてください。

viを終了したら、マージが完了しているので、これでマージは終わりです。

ブランチの削除

マージが終わったブランチは削除しても構わないので、次のコマンドでブランチを削除します。

git branch -d feature

コンフリクト

今回のマージはうまくいったかもしれませんが、必ず成功するというわけではありません。

例えばGitでは、新たに作成したブランチの変更と、ブランチを作成した後にマージ先のブランチで同じ場所を変更しているようなブランチでマージをする場合、どちらの変更を元にマージをすればいいのかを判断できません。

このようにどちらの変更を元にマージをすればいいのかを判断できず、マージができなくなることを「コンフリクト」と言います。

このような時には、自分自身の手でどちらの変更を優先するのかをGitに教えてあげる必要があります。

コンフリクトは、主に同じファイルを同時に変更する可能性のある、複数人で開発をしているような場合に起こります。

コンフリクトの対応は少し複雑なので、今後説明をします。

まとめ

ブランチを使うのであればマージの方法も一緒に覚える必要があります。

さらに、ブランチとマージは、Gitの複数人での利用には欠かせない機能です。