この前社内でGitのハンズオンを開催したので、コンフリクト解決に関する部分をまとめました。
基本的なコマンドは使えるけど、手元でコンフリクト解決したことないぜよな初心者向け。
基本用語解説編、基本コマンド編とも合わせてドウゾ
何なの
まずはイメ〜ジの話なのですけど
ロボを作っているラインがあるとします。
ある作業ブランチでは「左腕を武器に換装する」変更を、
ある作業ブランチでは「全身のカラーリングを赤にする」変更をしています。
「左腕を武器に換装する」変更を先にマージし、後からカラー変更をあてようとすると
コンフリクトが発生します。
左腕を赤く塗ろうと思ってたのになんか知らない武器付いてるよ!
親方〜〜〜これ塗っちゃって良いんすか確認お願いします!!!
的な状況です。
いつもならGit職人くんが特に確認なくうまいことマージしてくれるのですが
同じ箇所を変更するような場合は判断できないので人間の親方の出番です。
武器はやっぱツヤ消しの黒色がいい…
カラー変更は上腕まででよし…
親方こだわりのディテールを職人に教えてあげる
完成!つよそうですね
やってみよう
実際に手を動かすとこんなかんじです
こんなテキストファイル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"
解決!
気軽にコンフリクト解決していきましょう٩( ‘ω’ )و