シナリオ
- 開発中の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