Gitのマージ・マージオプションについて

# Gitのマージ

基本的なマージの操作方法

```shell
# 対象ブランチに切り替える
git checkout {branch_name}

# マージする
git merge {new_branch}
```

▼マージ前

```shell
* bbac238 - add sample4.txt (HEAD -> test) (3 seconds ago:2020-06-16 14:17:47 +0900) <Erika>
* 770ae3b - add sample3.txt (71 seconds ago:2020-06-16 14:16:39 +0900) <Erika>
| * f3bf129 - add sample2.txt (master) (34 seconds ago:2020-06-16 14:17:16 +0900) <Erika>
| * 1241db9 - add sample1.txt (2 minutes ago:2020-06-16 14:15:51 +0900) <Erika>
|/  
* 5f09f67 - initial commit (origin/master) (3 hours ago:2020-06-16 11:10:42 +0900) <Erika>
```

▼マージ後

```shell
*   3d3614d - Merge branch 'test' (HEAD -> master) (6 seconds ago:2020-06-16 14:18:42 +0900) <Erika>
|\  
| * bbac238 - add sample4.txt (test) (61 seconds ago:2020-06-16 14:17:47 +0900) <Erika>
| * 770ae3b - add sample3.txt (2 minutes ago:2020-06-16 14:16:39 +0900) <Erika>
* | f3bf129 - add sample2.txt (2 minutes ago:2020-06-16 14:17:16 +0900) <Erika>
* | 1241db9 - add sample1.txt (3 minutes ago:2020-06-16 14:15:51 +0900) <Erika>
|/  
* 5f09f67 - initial commit (origin/master) (3 hours ago:2020-06-16 11:10:42 +0900) <Erika>
```

# マージのオプションについて

### オプション一覧

| オプション       |       説明|
|:-----------------|:------------------|
| --ff             |デフォルト設定。2つのブランチがfast-forwardな関係の場合、コミットは作成されない。 |
| --no--ff           |2つのブランチがfast-forwardな関係の場合でも、コミットは作成される。|
| --squash             |対象ブランチの差分が取り込まれる。コミットは作成されない。|

※fast-forwardな関係・・・二つのブランチが同じ線上にある状態のこと

### Fast Forward Merge

操作コマンド

```shell
git merge --ff {branch_name}
```

▼マージ前

```shell
* 62c59b1 - add sample1.txt (HEAD -> test) (4 seconds ago:2020-06-16 14:42:26 +0900) <Erika>
* 5f09f67 - initial commit (origin/master, master) (4 hours ago:2020-06-16 11:10:42 +0900) <Erika>
```

▼マージ後

```shell
* 62c59b1 - add sample1.txt (HEAD -> master, test) (26 seconds ago:2020-06-16 14:42:26 +0900) <Erika>
* 5f09f67 - initial commit (origin/master) (4 hours ago:2020-06-16 11:10:42 +0900) <Erika>
```

### No Fast Forward Merge

操作コマンド

```shell
git merge --no-ff {branch_name}
```

▼マージ前

```shell
* 62c59b1 - add sample1.txt (HEAD -> test) (4 seconds ago:2020-06-16 14:42:26 +0900) <Erika>
* 5f09f67 - initial commit (origin/master, master) (4 hours ago:2020-06-16 11:10:42 +0900) <Erika>
```


▼マージ後

```shell
*   57c3e70 - Merge branch 'test' (HEAD -> master) (6 seconds ago:2020-06-16 14:46:02 +0900) <Erika>
|\  
| * 62c59b1 - add sample1.txt (test) (4 minutes ago:2020-06-16 14:42:26 +0900) <Erika>
|/  
* 5f09f67 - initial commit (origin/master) (4 hours ago:2020-06-16 11:10:42 +0900) <Erika>
```

### Squash Merge

操作コマンド

```shell
git merge --squash {branch_name}
git commit -m ''
```

▼マージ前

```shell
* 9c08e4b - add sample2.txt (HEAD -> master) (2 seconds ago:2020-06-16 14:48:27 +0900) <Erika>
| * 62c59b1 - add sample1.txt (test) (6 minutes ago:2020-06-16 14:42:26 +0900) <Erika>
|/  
* 5f09f67 - initial commit (origin/master) (4 hours ago:2020-06-16 11:10:42 +0900) <Erika>
```

▼マージ後

```shell
* 2e48ea9 - merge squash sample1.txt (HEAD -> master) (4 seconds ago:2020-06-16 15:07:00 +0900) <Erika>
* 9c08e4b - add sample2.txt (19 minutes ago:2020-06-16 14:48:27 +0900) <Erika>
| * 62c59b1 - add sample1.txt (test) (25 minutes ago:2020-06-16 14:42:26 +0900) <Erika>
|/  
* 5f09f67 - initial commit (origin/master) (4 hours ago:2020-06-16 11:10:42 +0900) <Erika>
```