マージ
ブランチを作成して、そこで作業を進めていき作業が終わったら、その作業を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の複数人での利用には欠かせない機能です。