Goalist Developers Blog

Gitをふんわり図解するシリーズ③ コンフリクト解決編

この前社内でGitのハンズオンを開催したので、コンフリクト解決に関する部分をまとめました。
基本的なコマンドは使えるけど、手元でコンフリクト解決したことないぜよな初心者向け。
基本用語解説編基本コマンド編とも合わせてドウゾ

何なの

まずはイメ〜ジの話なのですけど

f:id:y-iio:20181113184736p:plain
ロボを作っているラインがあるとします。
ある作業ブランチでは「左腕を武器に換装する」変更を、
ある作業ブランチでは「全身のカラーリングを赤にする」変更をしています。

f:id:y-iio:20181113184754p:plain
「左腕を武器に換装する」変更を先にマージし、後からカラー変更をあてようとすると
コンフリクトが発生します。

左腕を赤く塗ろうと思ってたのになんか知らない武器付いてるよ!
親方〜〜〜これ塗っちゃって良いんすか確認お願いします!!!

的な状況です。

いつもならGit職人くんが特に確認なくうまいことマージしてくれるのですが
同じ箇所を変更するような場合は判断できないので人間の親方の出番です。

f:id:y-iio:20181113184832p:plain
武器はやっぱツヤ消しの黒色がいい…
カラー変更は上腕まででよし…

親方こだわりのディテールを職人に教えてあげる

f:id:y-iio:20181113184914p:plain
完成!つよそうですね

やってみよう

実際に手を動かすとこんなかんじです

こんなテキストファイルconf.txt があったとする

ロボを作るよ

branch1ではこう変更

ロボを作るよ
左腕を武器に換装する

branch2ではこう変更

ロボを作るよ
機体を赤く塗る

branch1の変更をマージ後、branch2をマージしようとすると…コンフリクト発生!

$ git merge branch2
Auto-merging conf.txt
CONFLICT (content): Merge conflict in conf.txt
Automatic merge failed; fix conflicts and then commit the result.

とりあえずは状況の確認をする
conf.txtがboth modifiedですって

$ git status
On branch confex
You have unmerged paths.
  (fix conflicts and run "git commit")
  (use "git merge --abort" to abort the merge)

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

    both modified:   conf.txt

no changes added to commit (use "git add" and/or "git commit -a")

conf.txtの中身を見てみると
職人からの確認部分に「<<<<<<< HEAD」とか書き足されている

ロボを作るよ
<<<<<<< HEAD
左腕を武器に換装する
=======
機体を赤く塗る
>>>>>>> branch2

「=======」を境界にどっち側使うの〜と聞かれてるのでどっちもだ!と教えてあげる

ロボを作るよ
<<<<<<< HEAD ←消す
左腕を武器に換装する
======= ←消す
機体を赤く塗る
>>>>>>> branch2 ←消す

ロボを作るよ
左腕を武器に換装する
機体を赤く塗る

変更を保存してコミット

$ git add conf.txt
$ git commit -m "fix: conflict"

解決!

気軽にコンフリクト解決していきましょう٩( ‘ω’ )و

こんなのもあります

developers.goalist.co.jp

developers.goalist.co.jp