Web制作や開発プロジェクトでバージョン管理を行う際に役立つGitは、チームでの作業を円滑にするための重要なツールです。しかし、特に複数人で同時に作業を行う場合、マージ時にコンフリクト(衝突)が発生することがあります。この記事では、Gitのマージコンフリクトが発生する理由、コンフリクトの解決手順、具体的な例を交えながら解説します。

マージコンフリクトとは?

マージコンフリクトとは、異なるブランチで編集された内容が競合し、自動的にマージできない状況です。一般的に、以下のような状況で発生します。

  • 同じファイルの同じ行が編集された場合
  • ファイルの削除と編集が同時に行われた場合


例えば、AさんとBさんが同じコードファイルの同じ行に異なる変更を加えた場合、Gitはどちらの変更を優先すべきか判断できません。また、Aさんがファイルを削除し、Bさんが同じファイルを編集した場合も競合が発生するため注意が必要です。

コンフリクトが発生すると、Gitは通常「衝突しています」や「手動で解決してください」などのメッセージを表示します。これにより、エンジニアが手動でどちらの変更を優先するか選択する必要があります。

マージコンフリクトの発生を確認する方法

マージコンフリクトが発生しているかを確認するには、以下のような手順を踏みます。

  • ターミナルでの確認
    コマンドラインでgit statusを入力します。競合が発生したファイルがリストアップされ、「both modified」と表示されます。
  • Git GUIツールでの確認
    SourcetreeやGitKrakenなどのGUIツールを利用すると、視覚的にコンフリクトの発生が確認できます。競合部分は赤く表示されるため、どこが競合しているかが一目でわかります。

マージコンフリクトの解決手順

では、具体的にコンフリクトを解決する手順を説明します。

ステップ1:競合部分の確認

競合したファイルを開くと、以下のようなマークで囲まれた部分が表示されます:

<<<<<<< HEAD
// こちらが自分のブランチの変更
=======
// こちらがマージするブランチの変更
>>>>>>> ブランチ名

この区分を確認することで、どの部分が自分の変更で、どの部分が他のブランチの変更なのかがわかります。

ステップ2:どの変更を残すか判断する

変更内容を確認し、どちらを優先するかを決めます。場合によっては、両方の変更を統合する必要があるかもしれません。

ステップ3:競合部分を編集

自分で残したいコードのみを残し、<<<<<<<=======>>>>>>>といったマーカーを削除します。変更が終わったら、ファイルを保存します。

ステップ4:変更をGitに記録

競合部分を解消したファイルをgit addコマンドでステージングエリアに追加し、git commitでコミットします。これでコンフリクトが解決され、ブランチをマージできます。

コンフリクト解決の具体例

ここでは、具体的なコード例を使ってマージコンフリクトの解決方法を見ていきましょう。

例:Webページのタイトルを変更する場合

AさんはWebページのタイトルを「Welcome to Our Site」に、Bさんは「Welcome to My Site」に変更しています。両方の変更が同じ行で行われたため、コンフリクトが発生します。

<<<<<<< HEAD
<title>Welcome to Our Site</title>
=======
<title>Welcome to My Site</title>
>>>>>>> branch-b

この場合、プロジェクトの方針に従い、どちらのタイトルを採用するかを決めます。例えば、「Our Site」に統一する場合は、以下のように編集します。

<title>Welcome to Our Site</title>

編集後、git addgit commitを行い、コンフリクトを解消します。

マージコンフリクトを防ぐための工夫

コンフリクトが発生するのを完全に避けるのは難しいですが、発生頻度を減らすために次のような対策を行うことができます。

  • 定期的にプルを行う
    他のメンバーが作業した内容を頻繁に取り込むことで、自分のブランチとメインブランチの差分を減らすことができます。
  • 小さなコミットを心がける
    作業単位を小さくし、細かくコミットすることで、競合が起こりにくくなります。また、競合が発生した場合でも解決しやすくなります。
  • タスクを細分化する
    チームでの作業を分担する際、同じファイルや同じ行を編集するのを避けるようにしましょう。例えば、HTML、CSS、JavaScriptのファイルを担当ごとに分けると、コンフリクトが起こりにくくなります。

マージコンフリクトを効率的に解消するツール

Gitのコンフリクト解消をより簡単に行うためのツールも多く存在します。以下はその代表的なものです。

  • VS CodeのGit統合機能
    Visual Studio CodeにはGit統合機能があり、競合部分を視覚的に確認しながら解決できます。ファイルの変更部分がカラーで表示され、どの変更を採用するかをワンクリックで選択可能です。
  • Sourcetree
    Bitbucketを提供するAtlassianのSourcetreeは、視覚的にGitの管理が行えるツールです。コンフリクトの発生時には、選択した変更内容を取り入れる機能があり、直感的に操作が可能です。
  • GitKraken
    GitKrakenは、視覚的にブランチやコミットを確認しながら操作できるGitツールで、コンフリクト解消も簡単です。特に複雑なブランチ構成のプロジェクトでも便利です。

よくある質問:マージコンフリクトで気をつけるポイント

最後に、マージコンフリクトに関するよくある質問や注意点を紹介します。

  • どの変更を残すべきか迷ったとき
    プロジェクトの方針や他のメンバーに確認を取りましょう。コードレビューの際に意見をもらうのも一つの方法です。
  • コンフリクト解決後のテスト
    コンフリクトを解決した後は、必ず動作確認を行いましょう。特にWeb制作では、ブラウザでページが正常に表示されるかを確認し、意図しない変更がないかをチェックしてください。
  • コミットメッセージの記述
    コンフリクト解消後のコミットメッセージには、解消内容や解決方法を簡潔に記述すると、後で確認する際に役立ちます。

まとめ

Gitのマージコンフリクトは、チーム開発の現場で頻繁に発生する課題です。本記事では、マージコンフリクトの発生理由、発生時の確認方法、具体的な解決手順について解説しました。まず競合の確認からどの変更を残すべきかの判断、実際の編集方法まで詳しく説明し、さらに発生を防ぐための対策や解決を助けるツールも紹介しています。これを参考にすることで、効率的かつ効果的にマージコンフリクトを解決し、開発プロセスのスムーズ化に役立ててください。