VSCodeのマージエディタでgitコンフリクトを視覚的に解消する手順【Accept Incoming解説】

Git

チーム開発で git mergegit pull を実行した直後に Automatic merge failed; fix conflicts and then commit the result. と表示されて作業が止まった経験はありませんか。git マージ コンフリクトはチーム開発では必ず発生します。しかし、VSCodeのマージエディタを使えば、複雑なコンフリクトマーカーを手動で編集せずに視覚的・安全に解消できます。

この記事でわかること

  • コンフリクトが発生する仕組みと確認方法
  • VSCodeのマージエディタ(Merge Editor)を開く手順
  • Accept Incoming/Current/Combinationの使い分けとgit add・commitまでの完全な流れ

コンフリクト発生の確認

コンフリクトが発生すると、ターミナルに以下のメッセージが表示されます。

git merge develop
# 出力:
Auto-merging app.py
CONFLICT (content): Merge conflict in app.py
Automatic merge failed; fix conflicts and then commit the result.

コンフリクトが起きているファイルを確認します。

git status
# 出力:
On branch main
You have unmerged paths.
  (fix conflicts and run "git commit")

Unmerged paths:
  (use "git add <file>..." to mark resolution)
        both modified:   app.py

both modified と表示されているファイルがコンフリクトしています。コンフリクトしたファイル内には、Gitが自動挿入したコンフリクトマーカーが存在します。

<<<<<<< HEAD
def greet(name):
    return f"こんにちは、{name}さん"
=======
def greet(name):
    return f"Hello, {name}!"
>>>>>>> develop

VSCodeのマージエディタを開く

コンフリクトマーカーを直接手動で削除・編集するのは見落としのリスクがあります。VSCodeのマージエディタを使うと、GUIで安全に解消できます。

  1. ソース管理タブを開く

    VSCode左サイドバーのソース管理アイコン(分岐マーク)をクリックするか、Ctrl + Shift + G(Mac: Cmd + Shift + G)を押してソース管理タブを開きます。

  2. コンフリクトファイルを選択してマージエディタを開く

    「マージの変更」セクションに表示されているコンフリクトファイルをクリックします。ファイルが開いたら、エディタ右上に表示される「Resolve in Merge Editor」ボタンをクリックします。

  3. コンフリクト箇所を移動しながら解消する

    マージエディタが開くと、画面が3つに分割されます。左側が「Current(現在のブランチの変更)」、右側が「Incoming(マージするブランチの変更)」、下側が「Result(マージ結果)」です。

    画面右上の上下矢印ボタン(↑ / ↓)でコンフリクト箇所を順番に移動できます。見落としなくすべての箇所を処理してください。

Accept Incoming / Current / Combinationの使い分け

各コンフリクト箇所で、以下のいずれかを選択してマージ結果を決定します。

ボタン 動作 使う場面
Accept Current 現在のブランチ(HEAD)の変更を採用する 自分のブランチの実装を残したい場合
Accept Incoming マージするブランチの変更を採用する 相手のブランチの実装を取り込みたい場合
Accept Combination 両方の変更を結合する どちらのコードも残す必要がある場合

Result(下部)の内容を直接編集して、Accept Combination では対応できない複雑なマージ結果を手動で作ることもできます。

ポイント

どちらの変更を採用すべきか迷ったら、コードの変更者(git blame)や、PRのコメントで合意が取れているかを確認してから判断してください。技術的な正解よりもチームの合意が重要です。

Complete Merge → git add → git commit

すべてのコンフリクト箇所を処理したら、マージエディタ右下の「Complete Merge」ボタンをクリックします。その後、ターミナルでコミットを完了させます。

# すべてのコンフリクトを解消してステージングする
git add -A
# 出力:(出力なし)

# マージコミットを作成する
git commit -m "Merge develop: greet関数の日本語メッセージを採用"
# 出力:
[main b3c4d5e] Merge develop: greet関数の日本語メッセージを採用

注意

git add -A を実行する前に、すべてのコンフリクトファイルがマージエディタで「Complete Merge」されていることを確認してください。コンフリクトマーカー(<<<<<<<)が残ったままコミットすると、壊れたコードがリポジトリに入ります。

まとめ

  • コンフリクト発生後は git statusboth modified になっているファイルを確認する
  • VSCodeのソース管理タブから「Resolve in Merge Editor」を開き、Accept Incoming/Current/Combinationで各コンフリクト箇所を解消する
  • 「Complete Merge」後、git add -Agit commit でマージを完了させる

関連記事

コメント

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