0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

GitHubのコンフリクトについてまとめてみた

Last updated at Posted at 2020-09-01

どうも、ねこきち(@nekokichi1_yos2)です。

現在所属しているオンラインサロンで、チーム開発をすることになり、GitとGitHubの使い方を学んでいます。

ただ、プルリクで異なるブランチをマージする際に起こるコンフリクトについて
・どう解消する?
・競合するコードはどう表示されてる?
の疑問がありました。

今回は、実際のコンフリクトがどんなものか、を備忘録として書きます。

使用したコード

//ブランチ master
import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        
        
        
        
        for i in 0...10 {
            print("gdafa")
            print(i)
        }
        print("safesfaf")
    }


}
スクリーンショット 2020-08-11 15.35.08.png
//ブランチ test1
import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        //fsdae3
        //for i in 0...10
        for i in 0...10 {
            print("gdafa")
            print(i)
        }
        print("safesfaf")
    }


}
スクリーンショット 2020-08-11 15.35.08.png

コンフリクト時のコード

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        <<<<<<< test1
        //fsdae3
        //for i in 0...10
        =======
        
        
        
        
        >>>>>>> master
        for i in 0...10 {
            print("gdafa")
            print(i)
        }
        print("safesfaf")
    }


}

競合している部分は、ViewDIdLoad()内のsuper.viewDidLoad()を除いた部分。

そして、同じ行に異なる記述がコンフリクトで示されています。

スクリーンショット 2020-08-11 15.35.08.png

各ブランチの行を挙げると、
master
・15~18行:空白
・19~23行:コード
test1
・15~21行:コード

結果、15~21行、が重なっています。

しかし、GitHub上では、15~23行、が囲まれております。

各コードの最小最大範囲がコンフリクトの対象、になるのでしょうか。

もしくは、異なるコードの両方を足した行数が、たまたま15~23行になったのか。

それとも、>>>や<<<の行はないものと考えて良いのか。

少なくとも、>>>や<<<で囲まれている部分は同じ行で異なるコード、だということです。

コンフリクトを修正する

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        //fsdae3
        //for i in 0...10
        
        
        //コンフリクト解消〜
        
        for i in 0...10 {
            print("gdafa")
            print(i)
        }
        print("safesfaf")
    }


}

削除したコードは、
・<<<<<<< test1
・=======
・>>>>>>> master

追加したコードは、
・//コンフリクト解消〜

実は、>>>や<<<のコードを削除しただけで、マージできる状態になりました。
スクリーンショット 2020-08-11 15.35.08.png

なので、もしどのコードを修正すればいいかわからない時は、最悪>>>や<<<を削除すればコンフリクトを解消できます。

まとめ

コンフリクトに関して、
同じ行で異なるコードが重なった場合に起こる
>>>や<<<で囲まれた部分が競合するコード
>>>や<<<のコードは無いものと考えて良い
と覚えておきましょう。

もし、
手っ取り早くコンフリクトを解消したい
競合しているコードの両方を残したい
のであれば、
・<<<<<<< ファイル名
・=======
・>>>>>>> ファイル名
の行を削除すればOKです。

今回は簡単コードでしたが、コードが多くて、ロジックが複雑な場合、慎重にコードを修正しなくてはなりません。

これからチーム開発をしていくので、積極的にメンバーとコミュニケーションを取って、最善のコードを提案できるようになりたいです。

0
1
0

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
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?