#コンフリクトとは?
Gitにおけるコンフリクトとは、ソースコードの同じ行に別々の修正がされた際、Gitは内容の優先順位を決定できないためにマージができない状態のことを指す。今回はGit初心者の筆者がわかばちゃんと学ぶGit使い方入門を参考に、意図的に簡単なコンフリクトを起こしてそれを解消することでコンフリクトの解決方法を学ぶ。
#コンフリクトさせる前のソースコード
コンフリクトさせるソースコードの例としてごく単純な例を示す。
#include <stdio.h>
int main(){
printf("Hello World!\n");
return 0;
}
Gitを使う際は書籍に倣い、GUIがとても親切なSourceTreeを用いた。
まず、上記のコードをmasterとし、new_branchという名前のブランチを切る。
そしてソースコードのprintf()の文言を下記のように変更する。
#include <stdio.h>
int main(){
printf("Hello Branch World!\n");
return 0;
}
次に、masterにチェックアウトし、masterの方でもprintf()の文言を変更する。
#include <stdio.h>
int main(){
printf("Hello Master World!\n");
return 0;
}
それぞれをコミット&プッシュしたときのSourceTreeは下記のようになる。
これらは同一の行にあるprintf()のコードを変更しているのでコンフリクトが発生する。masterにチェックアウトしていることを確認し、作ったブランチnew_branchをmasterにマージする。そうすると下記の警告が出てコンフリクトが発生したことを教えてくれる。
ここでソースコードを確認する。エディタはVScodeを使っている。
なんとまあご丁寧にコンフリクトの場所を教えてくれるだけでなく、変更の取り込み方も提案してくれている。しゅごい。
とりあえず今回は自分の手でコンフリクトを解消するということなのでコンフリクトしているprintf()について下記のように変更を行った。
#include <stdio.h>
int main(){
printf("Hello Master Branch World!\n");
return 0;
}
文言としては支離滅裂だがとりあえずこのままで再度コミットをする。コミットの際は自動的に下記のコメントがつく。
Merge branch 'new_branch'
# Conflicts:
# src.c
これにより、無事にコンフリクトを解消し、無事にマージすることができた。
#まとめ
Git初心者の筆者がわかばちゃんと学ぶGit使い方入門を参考に、意図的に簡単なコンフリクトを起こしてそれを解消することでコンフリクトの解決方法を改めて学んだ。この本はコミットやブランチなど、基本的なコマンドについて概念から説明している本であり、絵や行間も多く用語も丁寧に説明しているため、Gitをほとんど使ったことのない本当の初心者が知らない単語を連発されて学習意欲をなくすことがほとんどないと思われる。
玄人にはおすすめできないが、趣味で小規模な開発するGit初心者にオススメできると考えられる。