アフィリエイト広告を紹介しています
Working Class Hero:泥臭く、スマートに生き抜く。

汗と汚れの染み込む現場も、キーボードを叩く現場も、どちらも知っている。 元ライン工の僕が、ITの世界で見つけた「少しだけ楽に、自分らしく働くための知恵」を置いておきます。

僕が働き方を変えた理由

【VSCode】git mergeのコンフリクト(競合)を解決する方法をわかりやすく解説!もう怖くない!

git mergeしたらコンフリクト(競合)が発生して、どうすればいいかわからない…。

初心者にとってコンフリクトは恐怖ですよね。でも大丈夫。VSCodeを使えば、コンフリクトは簡単に解決できます

この記事では、コンフリクトの原因から解決手順まで、初心者でもわかるように丁寧に解説します。

太郎
太郎

私も最初はコンフリクトが出るたびにパニックでした。でもやり方を知れば全然怖くないですよ!

コンフリクト(競合)とは?

コンフリクトとは、同じファイルの同じ部分を複数の人(またはブランチ)が変更した時に、Gitがどちらの変更を採用すべきか判断できない状態のことです。

例えば:

  • Aさんが main.js の5行目を「Hello」に変更
  • Bさんも main.js の5行目を「Hi」に変更
  • この2つをマージしようとすると → コンフリクト発生!

Gitは「HelloとHi、どっちを採用すればいい?」と判断できないので、人間に判断を委ねます。

コンフリクトが起きやすい場面
  • チーム開発で同じファイルを複数人が編集した時
  • 長期間ブランチを分けて作業していた時
  • mainブランチの変更を取り込む(merge/rebase)時

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

コンフリクトが発生すると、ファイル内に以下のようなマーカーが自動挿入されます:

<div class="speech-wrap sb-id-12 sbs-stn sbp-l sbis-cb cf">
<div class="speech-person">
<figure class="speech-icon"><img class="speech-icon-image" src="https://working-class-hero.net/wp-content/uploads/2023/10/cropped-ICON.jpg" alt="<<<<" width="80" height="80" /></figure>
<div class="speech-name"><<<<</div>
</div>
<div class="speech-balloon">
<p>現在のブランチの変更内容</p>
<p>=======</p>
<p>マージしようとしたブランチの変更内容</p>
</div>
</div>>>>> feature-branch
マーカーの意味
  • `
  • <<<<

    <<<<

    – `=======` ~ `

>>>> feature-branch` : **マージ元のブランチ**の変更

VSCodeでコンフリクトを解決する手順

ステップ1:コンフリクトが発生したファイルを開く

VSCodeのソース管理パネルを開くと、コンフリクトが発生したファイルに 「C」マーク が表示されています。

そのファイルをクリックして開きましょう。

ステップ2:VSCodeのボタンで解決する

VSCodeはコンフリクト箇所を色分けして表示し、解決用のボタンを表示してくれます。

ボタン 動作 いつ使う?
Accept Current Change HEADの変更を採用 自分の変更を優先したい時
Accept Incoming Change マージ元の変更を採用 相手の変更を優先したい時
Accept Both Changes 両方の変更を残す 両方とも必要な時
Compare Changes 差分を比較表示 違いを確認してから判断したい時
太郎
太郎

迷ったら「Compare Changes」でまず差分を確認しましょう。内容を理解してから判断すれば安全です!

ステップ3:手動で編集する(必要な場合)

ボタンの選択肢だけでは対応できない場合は、手動でファイルを編集します。

コンフリクトマーカー(`

<<<<`、`=======`、`>>>>>>>`)を全て削除し、最終的な正しいコードだけを残します。” width=”80″ height=”80″ /></figure>
<div class=<<<<`、`=======`、`>>>>>>>`)を全て削除し、最終的な正しいコードだけを残します。

例えば:

**コンフリクト発生時:**

“`javascript

<<<<<<< HEAD

const greeting = “Hello, World!”;

=======

const greeting = “Hi, Everyone!”;

>>>> feature-branch


**手動で修正後:**
```javascript
const greeting = "Hello, Everyone!";

このように、両方の変更を組み合わせた新しいコードにすることも可能です。

ステップ4:解決をコミットする

コンフリクトを解決したら、以下のコマンドでコミットします:

# 解決したファイルをステージング
git add .

# マージコミットを作成
git commit -m "Merge conflict resolved"

VSCodeのソース管理パネルからも同じ操作ができます。

複数ファイルでコンフリクトが起きた場合

大きなマージでは、複数のファイルで同時にコンフリクトが発生することがあります。

1
コンフリクトファイルの一覧を確認

ターミナルで `git status` を実行すると、「both modified」と表示されたファイルがコンフリクトファイルです。

2
1ファイルずつ解決する

焦らず1ファイルずつ開いて、コンフリクトを解決していきます。

3
全て解決したらコミット

全ファイルの解決が終わったら、`git add .` → `git commit` でマージを完了します。

コンフリクトを予防する方法

コンフリクト予防のベストプラクティス
  • **こまめにmainブランチの変更を取り込む**(`git merge main` or `git pull origin main`)
  • **小さい単位でコミット・マージする**(大きな変更を溜め込まない)
  • **チームメンバーとファイルの担当を分ける**(同じファイルの同時編集を避ける)
  • **変更前にpullする習慣をつける**
太郎
太郎

「毎朝mainをpullしてから作業を始める」を習慣にするだけで、コンフリクトは激減しますよ!

マージを中止したい場合

コンフリクトの解決が難しいと感じたら、マージを中止して元の状態に戻すことも可能です。

# マージを中止(コンフリクト発生前の状態に戻る)
git merge --abort

これで安全に元の状態に戻れます。落ち着いてから再チャレンジしましょう。

Gitをもっと使いこなしたいなら

コンフリクト解決ができるようになると、チーム開発で困ることが大幅に減ります。

関連記事
  • [VSCodeでGitHubブランチを削除する方法](/blog/1652/)
  • [git pullでブランチが最新にならない時の対処法](/blog/2220/)
  • [git stashの使い方・作業を一時保存する方法](/blog/3408/)
  • [VSCodeのGitHubコミット方法やpush取り消し方法](/blog/2033/)

Git操作を含めたプログラミング全体を体系的に学びたいなら、スクールの活用がおすすめです。

Git・プログラミングを体系的に学ぶなら

独学で限界を感じていませんか?プロのカリキュラムなら最短でスキルが身につきます。

DMM WEBCAMPで学ぶ →
デイトラで学ぶ →
忍者CODEで学ぶ →

※無料体験・無料カウンセリングあり

まとめ:コンフリクトは「怖い」から「慣れ」に変わる

今回は、VSCodeでgit mergeのコンフリクトを解決する方法を解説しました。

コンフリクト解決の3ステップ
  • VSCodeのボタン(Accept Current/Incoming/Both)で選択
  • 必要に応じて手動でコードを編集
  • `git add .` → `git commit` で完了

コンフリクトはGitを使う上で避けて通れないものです。しかし、仕組みと解決手順を知っていれば何も怖くありません。

何度か経験すれば、自然と「あ、またコンフリクトか」くらいの気持ちで対処できるようになりますよ!

コメント