Gitコンフリクトとは?merge conflictの原因と解決方法 – 10/12

前回の記事では git merge を解説しました。

git merge

ブランチを統合する操作

でした。

しかしブランチを統合する際、次のような問題が発生することがあります。

merge conflict

つまり コンフリクト(競合)です。

コンフリクトはGitを使った開発で必ず一度は経験する問題です。

この記事では次の内容を解説します。

  • Gitコンフリクトとは
  • コンフリクトが起きる原因
  • コンフリクトの表示
  • コンフリクトの解決方法
  • コンフリクトを防ぐ方法

コンフリクトとは

コンフリクトとは

同じファイルの同じ場所を
複数のブランチが変更した状態

です。

Gitはどちらの変更を採用するべきか判断できないため、手動で解決する必要があります。


コンフリクトが起きる例

例えば次のような状況です。

mainブランチ

function greet() {
  console.log("Hello")
}

featureブランチ

function greet() {
  console.log("Hi")
}

この2つの変更をmergeすると、Gitはどちらを採用するべきか判断できません。

その結果

merge conflict

が発生します。


コンフリクト発生時の表示

コンフリクトが発生すると、ファイルには次のようなコードが表示されます。

<<<<<<< HEAD
console.log("Hello")
=======
console.log("Hi")
>>>>>>> feature-login

それぞれの意味は次の通りです。

<<<<<<< HEAD
現在のブランチのコード

=======
区切り

>>>>>>> feature-login
マージするブランチのコード

つまり

2つの変更が衝突している

という状態です。


コンフリクトの解決方法

コンフリクトは次の手順で解決します。

1 ファイルを編集

不要なコードを削除し、正しいコードを残します。

function greet() {
  console.log("Hello")
}

または

function greet() {
  console.log("Hi")
}

2 マーカーを削除

次の記号は必ず削除します。

<<<<<<<
=======
>>>>>>>

3 git add

修正したファイルをステージングします。

git add app.js

4 commit

その後コミットします。

git commit

これでコンフリクトは解決されます。


git statusで確認

コンフリクトが発生すると

git status

を実行したとき

both modified

と表示されます。

すべて解決すると

all conflicts fixed

になります。


VSCodeでの解決

最近はエディタを使って解決することが多いです。

VSCodeではコンフリクトがあると

Accept Current Change
Accept Incoming Change
Accept Both Changes

などの選択肢が表示されます。

これを使うと簡単に解決できます。


コンフリクトを防ぐ方法

コンフリクトは完全に防ぐことはできませんが、減らすことはできます。


こまめにpullする

作業前に

git pull

を行います。


小さくコミットする

変更を小さく分けることで衝突を減らせます。


ブランチを短命にする

長期間のブランチはコンフリクトが起きやすくなります。


GitHubでのコンフリクト

GitHubのPull Requestでもコンフリクトが表示されます。

This branch has conflicts

この場合

Resolve conflicts

ボタンから修正できます。


コンフリクトは怖くない

初心者はコンフリクトを怖がりますが

普通の作業

です。

開発では日常的に起こります。

重要なのは

落ち着いて修正する

ことです。


まとめ

この記事では Gitコンフリクト を解説しました。

重要なポイント

コンフリクト = 同じ場所の変更

解決手順

編集
↓
git add
↓
git commit

コンフリクトはGit開発では避けられないものですが、正しい手順を知っていれば簡単に解決できます。


次の記事

次回は

GitHub Flow

を解説します。

GitHub Flowは

GitHubでの開発手順

です。

これを理解すると、実際のチーム開発の流れが分かります。

コメント

タイトルとURLをコピーしました