gitで間違ってmergeしてしまったものをrevertして再度mergeするとどうなるかを検証する。

## シナリオ
- 開発中のhogehogeブランチで作業中、間違ってmasterにマージしてpushしてしまった！！
- masterにマージした内容をリバート＆push
- masterブランチでは開発を進める
- hogehogeブランチでは開発を進める
- hogehogeブランチで開発が終わったので、プルリクして、masterにマージする
- 誤ってマージした分までの変更内容はどうなる！？

## 前準備
### github上でリポジトリの作成、ファイルの追加など。  

```
$ git clone git@github.com:mapyo/merge-revert-test.git
$ cd merge-revert-test
$ vim test.txt　→　ファイルを編集
$ cat test.txt
masterの最初の作業1
masterの最初の作業2
masterの最初の作業3
masterの最初の作業4
masterの最初の作業5
$ git add test.txt
$ git commit
$ git push origin master
```

### hogehogeブランチで作業をする。

```
$ git checkout -b hogehoge
$ vim test.txt　→　ファイルを編集
$ cat test.txt
masterの最初の作業1
hogehogeブランチの作業1
hogehogeブランチの作業2
hogehogeブランチの作業3
hogehogeブランチの作業4
hogehogeブランチの作業5
masterの最初の作業2
masterの最初の作業3
masterの最初の作業4
masterの最初の作業5
$ git add test.txt
$ git commit
$ git push origin hogehoge 
```

### 一方、masterでも作業は進む。

```
$ git checkout master
$ vim test.txt　→　ファイルを編集
$ cat test.txt
masterの最初の作業1
masterの最初の作業2
masterの最初の作業3
masterの最初の作業4
masterの最初の作業5
masterのhogehogeブランチ作成後の作業1
masterのhogehogeブランチ作成後の作業2
masterのhogehogeブランチ作成後の作業3
masterのhogehogeブランチ作成後の作業4
masterのhogehogeブランチ作成後の作業5
$ git add test.txt
$ git commit
$ git push origin hogehoge 
```

## 実際の作業(シナリオを実行します）
### 間違ってhogehogeブランチの内容をmasterにマージしてpushしてしまった！！！！

```
$ git checkout master
$ git merge hogehoge
$ cat test.txt
masterの最初の作業1
hogehogeブランチの作業1
hogehogeブランチの作業2
hogehogeブランチの作業3
hogehogeブランチの作業4
hogehogeブランチの作業5
masterの最初の作業2
masterの最初の作業3
masterの最初の作業4
masterの最初の作業5
masterのhogehogeブランチ作成後の作業1
masterのhogehogeブランチ作成後の作業2
masterのhogehogeブランチ作成後の作業3
masterのhogehogeブランチ作成後の作業4
masterのhogehogeブランチ作成後の作業5
$ git push origin master 
```

### masterにマージしてしまった内容をrevertしてpush

```
$ git revert -m 1 7efc257a73afacb12754240063739ed5d0b4e000
↑は、mergeした時のコミットのハッシュ値を入力
$ cat test.txt
masterの最初の作業1
masterの最初の作業2
masterの最初の作業3
masterの最初の作業4
masterの最初の作業5
masterのhogehogeブランチ作成後の作業1
masterのhogehogeブランチ作成後の作業2
masterのhogehogeブランチ作成後の作業3
masterのhogehogeブランチ作成後の作業4
masterのhogehogeブランチ作成後の作業5
$ git push origin master
```

### masterブランチでは開発を進める

```
$ git checkout master
$ vim test.txt
$ cat test.txt
masterの最初の作業1
masterの最初の作業2
masterの最初の作業3
masterの最初の作業4
masterの最初の作業5
masterのhogehogeブランチ作成後の作業1
masterのhogehogeブランチ作成後の作業2
masterのhogehogeブランチ作成後の作業3
masterのhogehogeブランチ作成後の作業4
masterのhogehogeブランチ作成後の作業5
masterのrevert後の作業1
masterのrevert後の作業2
masterのrevert後の作業3
masterのrevert後の作業4
masterのrevert後の作業5
$ git add test.txt
$ git commit
$ git push origin master
```

### hogehogeブランチでも開発を進める

```
$ git checkout hogehoge
$ vim test.txt
$ cat test.txt
masterの最初の作業1
hogehogeブランチの作業1
hogehogeブランチの作業2
hogehogeブランチの作業3
hogehogeブランチの作業4
hogehogeブランチの作業5
masterの最初の作業2
hogehogeブランチのrevert後の作業1
hogehogeブランチのrevert後の作業2
hogehogeブランチのrevert後の作業3
hogehogeブランチのrevert後の作業4
hogehogeブランチのrevert後の作業5
masterの最初の作業3
masterの最初の作業4
masterの最初の作業5
$ git add test.txt
$ git commit
$ git push origin hogehoge
```

### hogehogeブランチで開発が終わったので、プルリクして、masterにmerge。
github上で作業します！！！
ちなみに、該当のpull requestは以下。
https://github.com/mapyo/merge-revert-test/pull/1

### 誤ってマージした分までの変更内容はどうなる！？プルリクした時点でわかっちゃいましたが、一応、確認。

```
$ git checkout master
$ git fetch
$ git pull origin master
$ cat test.txt
masterの最初の作業1
masterの最初の作業2
hogehogeブランチのrevert後の作業1
hogehogeブランチのrevert後の作業2
hogehogeブランチのrevert後の作業3
hogehogeブランチのrevert後の作業4
hogehogeブランチのrevert後の作業5
masterの最初の作業3
masterの最初の作業4
masterの最初の作業5
masterのhogehogeブランチ作成後の作業1
masterのhogehogeブランチ作成後の作業2
masterのhogehogeブランチ作成後の作業3
masterのhogehogeブランチ作成後の作業4
masterのhogehogeブランチ作成後の作業5
masterのrevert後の作業1
masterのrevert後の作業2
masterのrevert後の作業3
masterのrevert後の作業4
masterのrevert後の作業5
```

間違ってmergeしてrevertした分の作業内容がやっぱり反映されてないですね。
※参考までに、誤ってhogehogeブランチから、masterにマージしてしまって、revertする前のtest.txtの内容を再度載せます。「hogehogeブランチの作業」分がごっそり抜けてますね。

```
$ cat test.txt
masterの最初の作業1
hogehogeブランチの作業1
hogehogeブランチの作業2
hogehogeブランチの作業3
hogehogeブランチの作業4
hogehogeブランチの作業5
masterの最初の作業2
masterの最初の作業3
masterの最初の作業4
masterの最初の作業5
masterのhogehogeブランチ作成後の作業1
masterのhogehogeブランチ作成後の作業2
masterのhogehogeブランチ作成後の作業3
masterのhogehogeブランチ作成後の作業4
masterのhogehogeブランチ作成後の作業5
```

## 結論
このパターン怖いですねー。
どうすればいい感じの対応になるのかご存知の方、教えてください！
そして、読み返すとかなりわかりづらくなってしまった。。。org

## 補足
今回、検証に使ったgithubのリポジトリは以下になります。
https://github.com/mapyo/merge-revert-test