【初心者向け】VSCodeとGithubの連携 for Windows ④ ~競合の解消~

こんにちは、ピピよです。第4作目。【初心者向け】VSCodeとGithubの連携 for Windows 最後の記事になります。

前作までの記事はこちら

今回は

  • 競合が起きてしまったら…
  • 競合時の2つの表記名について
  • 競合を解消する手順

を見ていきましょう。

競合が起きてしまったら…

前作の最後で軽く触れたのですが、同じファイルを編集していると「競合」という状態になる可能性があります。
競合状態が解消するまで、その後の操作が制限されてしまいます。

変更内容を確認して、競合を解消していく必要があります。

Point:競合とは

GitHub Docs では以下のように書かれています。

競合するコミットを持つブランチをマージしようとしたときに生じるもので、最終のマージにどちらの変更を取り入れるかを Git が判断するのに手助けが必要になります。

GitHub Docs|マージ競合について

別のブランチで同じファイルの同じ場所を編集した時、ブランチをマージしようとするとGitはどちらのブランチの変更を採用すればよいのかわからず「競合」という判断をします。

競合時の2つの表記名について

二つのブランチをマージしようとした時に、競合が発生します。

この時、現在作業しているブランチ(チェックアウトブランチやカレントブランチとも言います)を別のブランチとマージしようとしているわけです。

競合を解消する操作時、この2つのブランチにはそれぞれ呼び名があります。

ブランチ名競合操作時の表記名
現在作業しているブランチ
(またはチェックアウトブランチ、カレントブランチ)
<<<<<<< HEAD(現在の変更)
別のブランチ{ブランチ名}(入力側の変更)

マージの際、作業しているブランチを「現在の変更」、マージしている作業していない別のブランチを「入力側の変更」というように表記されています。

Gitのブランチ図。現在作業中のブランチ feature/index_html と、別のブランチ feature/style_css が分岐して表示されている。

競合を解消する手順

ここからは、競合の解消方法を説明していきます。
前作と同様に、VSCodeに入れてあるプラグイン「Git Graph」を活用します。

競合場所の確認

1、マージ実行
前作の「マージの手順:2、マージ実行後」をご確認ください。

2、競合発生
競合を起こすと「Error:Unable to Merge Commit」の画面が表示される

VS CodeのGit Graph画面。中央にマージ競合のエラーメッセージが表示されている。

「Dismiss」で画面を閉じる
※画面を閉じたからと言って競合は解消されませんので注意

3、ソース管理を開く
ソース管理ボタンをクリックしてソース管理のウインドウを開く
変更のウインドウには、「変更のマージ」と「ステージされている変更」の項目が表示されている。
「変更のマージ」の項目が競合を起こしているファイルです

VS CodeでGit管理中の画面。変更されたファイル一覧とブランチ履歴が表示されている。

変更のマージ内のファイルをクリックすると、競合の詳細を確認することができます。
競合している箇所は画像のように、緑と青の枠が表示されています。

VS CodeでGitの競合内容を確認している画面

競合内容の確認

緑(上側)の枠は作業しているブランチ「現在の変更」を、青(下側)の枠はマージしている作業していない別のブランチ「入力側の変更」です。同じ場所で異なった修正をしていると競合が起こります。

VS CodeでGit競合が上下に表示されている画面例

2つの変更内容を比較して、どちらか一方を残すか、両方残すか、じっくり比較して対応を考えるのかを決めます。

競合の解消

競合の解消方法は3パターンあります。

  1. どちらか一方を残す場合
  2. 両方を残す場合
  3. 比較して考える場合
VS CodeでGit競合解消時に表示される選択肢のメニュー画面

競合している箇所の左上の部分、「現在の変更を取り込む」「入力側の変更を取り込む」「両方の変更を取り込む」「変更の比較」のボタンで操作します。

1.どちらか一方を残す場合

どちらか一方を残す場合は、「現在の変更を取り込む」か「入力側の変更を取り込む」をクリックします。そうすると片方の変更内容が反映されてもう片方は削除されます。 
競合が解消されると、競合を表す緑と青の枠はなくなります。最後にファイルを「保存」をします。

VS CodeでGitの競合解消を行う操作例

2.両方を残す場合

両方残す場合、「両方の変更を取り込む」をクリック。そうすると、両方の変更内容が残ります。あとは1の手順と同様に、ファイルを「保存」します。

3.比較して考える場合

内容を比較してどの変更内容を残すか決めたい時は「変更の比較」をクリックします。変更を細かく確認します。1の手順と同様に、ファイルを「保存」します。

再度ステージングしてプッシュ

ファイル内のすべての競合の解消が完了したら、ソース管理ボタンをクリックしてソース管理のウインドウを開きます。競合が解消していれば、ステージングが可能になるので「変更のマージ」の内容をすべてステージングします。

ステージングの方法は、こちらの記事

の 「②操作方法:2、ステージングとコミット」をチェック

「続行」をクリック。
つづけて「変更の同期」をクリックします。

VS CodeでのGitマージコンフリクト解消手順の画面例

これで競合の解消は完了です。

まとめ

WindowsのVSCodeとGithubの連携について、順番に説明していきました。
ご自身の環境でぜひ試してみてください。最後まで読んでいただきありがとうございました!

作者情報

気になった居酒屋には一人でも入店します。
初めてのお店でも常連と間違われる不思議な現象に見舞われることが…。
ビールをこよなく愛していますが、家では金麦派。