エンジニアライフスタイルブログを運営しているミウラ(@miumiu06171)です。
こんにちは、普段はフリーランスでシステムエンジニアをしております。
今回は、プログラミング初心者がチーム開発を行う時におさえておきたい【GitマージとGitコンフリクトの対処方法】を紹介していきます。
Gitブランチがわからない方は、こちらの記事でGitブランチを学習した上で、本記事のGitマージやGitコンフリクトを学ぶことをおすすめします。
Gitマージ(git merge)
ここでは、Gitマージする方法を紹介していきます。
Gitマージとは
Gitマージとは、複数のブランチで独立して進めていた作業を1つのブランチに統合することを言います。
下図は、masterとdevelopの2つのブランチがあり、developブランチで開発していたC地点とD地点の内容をmasterブランチにマージしている様子を図式化したものです。

Gitマージする方法(git merge)
Gitマージするには、以下の「git merge」コマンドを実行します。
【コマンド書式】
「git merge」コマンドで指定した「取り込みたいブランチ名」の変更差分を、現在のブランチに取り込みます。
git merge <取り込みたいブランチ名> |
【コマンド解説】
masterブランチにいる状態で「git merge develop」とすると、developブランチの変更差分がmasterブランチにマージされます。

現在どのブランチにいるかは「git branch」コマンドで確認することができます。
Gitコンフリクト(git conflict)
ここでは、Gitコンフリクト発生時の見方や対処方法を紹介していきます。
Gitコンフリクトとは
コンフリクト(conflict)とは、そもそも「衝突」を意味しています。
そしてGitコンフリクトとは、前述したGitマージしたときに発生する衝突のことで、マージ対象のブランチで同じファイルの同じ箇所で修正を行った時に発生します。

上図は、masterブランチのB地点、developブランチのC地点のそれぞれでcommon.txtの2行目に追記した後、developブランチの変更内容をmasterブランチにマージしたときを図式化したものです。
このとき、common.txtでコンフリクトが発生します。
Gitコンフリクト時のファイルの見方
Gitコンフリクトが発生すると、下図のようにコンフリクトが発生したファイルの箇所がハイライトで表示されます。

コンフリクトでハイライトされたファイルの見方は、「<<<<<」、「=====」、「>>>>>」の間に現在のブランチで取り込む側(master)とマージコマンドで指定したブランチで取り込まれる側(develop)の変更差分が表示されます。
<<<<<
<現在のブランチの変更内容> ===== <マージコマンドで指定したブランチの変更内容> >>>>> |
Gitコンフリクト時の対処方法
前述したGitコンフリクトが発生したときの対処方法として、片側だけ残す方法と両方とも残す方法を紹介します。
コンフリクト箇所の片側だけ残す
現在のブランチで変更した内容を残す場合、下図のように「<<<<<」と「=====」で囲まれていた内容のみを残し、それ以外のコンフリクト箇所を削除した後、ファイルを保存してコミットすればオッケーです。

マージコマンドで指定したブランチ名の変更内容を残す場合も同様に「=====」と「>>>>>」で囲まれた内容のみを残し、それ以外のコンフリクト箇所を削除した後、ファイルを保存してコミットすればオッケーです。

コンフリクト箇所の両方とも残す
両方とも残す場合も「<<<<<」、「=====」、「>>>>>」の記号を削除後、ファイルを保存してコミットすればオッケーです。

まとめ
いかがでしたでしょうか。
GitマージやGitコンフリクトは、チーム開発のときに発生することが多いため、実務のときによく見かけます。
そして、Gitコンフリクトの対処方法を誤ると、チームメンバーに迷惑がかかるため、正しい見方と対処方法をきっちりおさえて操作するようにしましょう。