未経験者は読まないとやばい！GitHubでのコンフリクト解消法

# コンフリクトとは
チームで開発をしている時に同じファイルの変更箇所が重複した時に起こることを
conflict(衝突)と言います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1748789/c19a457c-9f94-0bd3-93df-318c26150772.png)


> 引用　https://m-kenomemo.com/git-conflict/

# コンフリクトの解消方法
1.git rebase
ブランチ元のポイントを変えていきます。

2.```git merge```
***マージ先のブランチを違う方向にマージして解消します。こっちの方が簡単***です。

# git mergeを使った解消法
まずはわざとコンフリクトを発生させていきます。

1. ブランチを作成
まずはdvelopブランチの状態です。
```test
1 //このリポジトリはテスト
2 テストするぞ
3 いえー
```
ブランチを作成します。 feature/green、feature/redを作ります。
```
training-git % git branch
* develop
  feature/green
  feature/red
  master
```
それぞれのブランチで以下のように作業をしてそれぞれのブランチでプルリクをだします。
```feature/green```を
```test
1//テストするぞ
2コンフリクトを起こすぞ！
3コンフリクトだ！
```
```feature/red```を
```test
1//このリポジトリはテスト
2conflict
3いやだー
```
にします。

するとプルリクを出すと下のような表示が出ます。これがconflictが起きている画面です。

![スクリーンショット 2023-04-28 17.54.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1748789/874b5aaa-2893-8618-6ed0-bb095e4df5e2.png)

それでは解決をしていきます。

まずはdevelopブランチに移動します。その後pullします。
```
training-git % git checkout develop      
Switched to branch 'develop'
training-git % git pull origin develop
#省略
 branch            develop    -> FETCH_HEAD
   27b30e0..51fba42  develop    -> origin/develop
Updating 27b30e0..51fba42
Fast-forward
 test | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)
```
そしてfeature/greenに移動してdevelopブランチにgit mergeします。
```
training-git % git checkout feature/green
Switched to branch 'feature/green'
training-git % git merge develop      
Auto-merging test
CONFLICT (content): Merge conflict in test
Automatic merge failed; fix conflicts and then commit the result.
```
するとこんな感じの画面になります。


![スクリーンショット 2023-04-28 18.08.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1748789/5cd7f4c2-574c-d06e-a89b-cff6d0d2dd0d.png)

上に　```現在の変更を取り込む、入力側の変更を取り込む、両方の変更を取り込む、現在の変更を取り込む```
と表示されています。今は日本語設定になっていますが、***英語設定だと表示が変わってきます***。
英語だと```AcceptCurrentChange、AcceptIncomingChange、```
```AcceptBothChanges、CompareChanges```と表示されます。

***現在の変更を取り込む***だと***feature/greenブランチにいるのでfeature/greenの内容が反映***されます。

![スクリーンショット 2023-04-28 18.18.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1748789/530fb6e4-06e1-4d28-62ec-a8860fe29d56.png)

```ctrl + z```で元に戻ります。

![スクリーンショット 2023-04-28 18.21.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1748789/8b2b4447-6a10-6539-6ed6-949cc00535f3.png)

***入力側の変更を取り込む***だと***feature/redブランチの内容が反映***されます。

![スクリーンショット 2023-04-28 18.22.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1748789/fc895648-a9bf-4218-2cb0-33b7246e37b2.png)

```両方の変更を取り込む```と2つのブランチの内容が反映されます。

![スクリーンショット 2023-04-28 18.27.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1748789/2e22f2b8-8e64-688e-eea9-1d935b50597a.png)

変更の比較を押すと下のようになります。

![スクリーンショット 2023-04-28 18.29.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1748789/8928dd27-0c17-c999-ab91-2486b38f1e90.png)

今回は両方を取り込みました。feature/greenブランチから
```
training-git % git add . 
training-git % git commit -m "コンフリクト解消"
training-git % git push origin feature/green
```
でpushした後GitHubを確認するとコンフリクトが解消されていました。

![スクリーンショット 2023-04-28 18.38.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1748789/d672d313-0828-1746-d899-b328d57a5263.png)


# まとめ
かなり簡単な内容ですが大事なので参考にしてみてください。

# 資料
https://backlog.com/ja/git-tutorial/pull-request/10/

https://qiita.com/chihiro/items/5d8cb21457a9c707c565