シナリオ
- 開発中の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
Qiitaにも投稿したよ!
http://qiita.com/mapyo/items/450b14c2a24c436ed57e