LoginSignup
3

More than 3 years have passed since last update.

Gitの簡単なコンフリクトを解消する  ~わかばちゃんと学ぶGit使い方入門SECTION13~

Last updated at Posted at 2019-05-14

コンフリクトとは?

Gitにおけるコンフリクトとは、ソースコードの同じ行に別々の修正がされた際、Gitは内容の優先順位を決定できないためにマージができない状態のことを指す。今回はGit初心者の筆者がわかばちゃんと学ぶGit使い方入門を参考に、意図的に簡単なコンフリクトを起こしてそれを解消することでコンフリクトの解決方法を学ぶ。

コンフリクトさせる前のソースコード

コンフリクトさせるソースコードの例としてごく単純な例を示す。

src
#include <stdio.h>
int main(){
    printf("Hello World!\n");
    return 0;
}

Gitを使う際は書籍に倣い、GUIがとても親切なSourceTreeを用いた。

まず、上記のコードをmasterとし、new_branchという名前のブランチを切る。
そしてソースコードのprintf()の文言を下記のように変更する。

src
#include <stdio.h>
int main(){
    printf("Hello Branch World!\n");
    return 0;
}

次に、masterにチェックアウトし、masterの方でもprintf()の文言を変更する。

src
#include <stdio.h>
int main(){
    printf("Hello Master World!\n");
    return 0;
}

それぞれをコミット&プッシュしたときのSourceTreeは下記のようになる。

キャプチャ.PNG

これらは同一の行にあるprintf()のコードを変更しているのでコンフリクトが発生する。masterにチェックアウトしていることを確認し、作ったブランチnew_branchをmasterにマージする。そうすると下記の警告が出てコンフリクトが発生したことを教えてくれる。
キャプチャ2.PNG

キャプチャ3.PNG

ここでソースコードを確認する。エディタはVScodeを使っている。

キャプチャ4.PNG

なんとまあご丁寧にコンフリクトの場所を教えてくれるだけでなく、変更の取り込み方も提案してくれている。しゅごい。

とりあえず今回は自分の手でコンフリクトを解消するということなのでコンフリクトしているprintf()について下記のように変更を行った。

src
#include <stdio.h>
int main(){
    printf("Hello Master Branch World!\n");
    return 0;
}

文言としては支離滅裂だがとりあえずこのままで再度コミットをする。コミットの際は自動的に下記のコメントがつく。

Merge branch 'new_branch'

# Conflicts:
#   src.c

これにより、無事にコンフリクトを解消し、無事にマージすることができた。

キャプチャ5.PNG

まとめ

Git初心者の筆者がわかばちゃんと学ぶGit使い方入門を参考に、意図的に簡単なコンフリクトを起こしてそれを解消することでコンフリクトの解決方法を改めて学んだ。この本はコミットやブランチなど、基本的なコマンドについて概念から説明している本であり、絵や行間も多く用語も丁寧に説明しているため、Gitをほとんど使ったことのない本当の初心者が知らない単語を連発されて学習意欲をなくすことがほとんどないと思われる。
玄人にはおすすめできないが、趣味で小規模な開発するGit初心者にオススメできると考えられる。

リポジトリ

参考文献

湊川あい著 DQNEO監修 (2017) 『わかばちゃんと学ぶGit使い方入門』 C&R研究所

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3