//ルートにアクセスされたら/archiveにリダイレクトする
読者です 読者をやめる 読者になる 読者になる

エイリーの備忘録

開発や音楽について書いていこうと思っています。

git コンフリクトの解消法

コンフリクトとは
日本語に訳すと衝突・競合とよく説明されていますがよくわからないですよね。

例えば、masterブランチからAブランチとBブランチを同じコミットのタイミングで作ったとします。
AブランチとBブランチで同じファイルで変更を加えてコミットしたとします。
Aブランチがmasterブランチにマージしました。
その次にBブランチがmasterにマージしようとしました。
するとgitはAブランチの変更を適用しているためBブランチの変更を適用しようと思ってもどちらを優先して変更を加えたらいいのかわからなくなります。
ここでconflict(衝突)が起きるわけです。

では、コンフリクトの解消法を紹介させていただきたいと思います。

コンフリクトの解決

f:id:youmjww:20170512015846p:plain
上記の画像のようにコンフリクトが発生すると、コンフリクトの発生したファイルを表示してくれます。
この例ですと、二行目に書いてあるhoge.txtがコンフリクトを起こしているのがわかります。

このhoge.txtの内容を編集して本来望んでいた形に修正してあげたいと思います。
f:id:youmjww:20170512020738p:plain

このファイルの内容(もっとマシなデータを用意できなかったのかよ)を例に上げますと、2行目がAブランチの変更で4,5行目Bブランチの変更です。
Aブランチの内容が先にマージされているのでBブランチの内容が適用できていないみたいですね。
これをあるべき形・正しい形に修正してあげてください。
今回の場合は変更を全て適用したいので1,3,6行目を削除してあげてファイルを保存します。
あとは、addしてcommitするだけです。
これでコンフリクトの解決は完了です。

ファイルが大きい場合

数行程度の小さいファイルなら何も工夫をしなくても問題は無いのですが、実際に開発をしているとそんなに小さいファイルばかりではなく数百行のファイルから目視でコンフリクトをしている場所を探すのは骨が折れますよね。
そこで有効活用をしたいのがエディタの検索です。
コンフリクトが起きると必ず<<<<<<と======と>>>>>>が挿入されます。
この3つのどれかで検索をかけてあげてください。
するとコンフリクトが起きている箇所がすぐに見つかります。
コンフリクトの発生場所を見つけることができたら、コンフリクトを修正してaddしてcommitしてください。

コンフリクトが複数起きている場合

vscodeを開いて左メニューの上から3個め(ソース管理)を開いてください
f:id:youmjww:20170512024743p:plain
するとコンフリクトが起きているファイルを一覧で見ることが出来ます。
ついでにコードを見るとハイライトまでされるのでコンフリクトの場所をすぐに見つけることができるので効率よくコンフリクトを解消できると思います。

あとがき

コンフリクトが発生すると最初は戸惑いますよね。
でも、コンフリクトの理由さえわかってしまえばすぐに修正することが可能です。
チームで開発をしているとたまにコンフリクトが起きたりしますので落ち着いて解決できるようになりたいですね。

そういえば、この前の記事でlinux,mac,windowsで共通して同じUIで使えるgit cliantはありますかって聞いて無いと答えましたがありましたw
VScodeがgitクライアントの機能が入っているのを忘れていましたw
ただVScodeだとgit initやリセットソフトなどが出来ないからなあ・・・やっぱりCUIがやりやすいですw