59
58

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2013-08-05

シナリオ

  • 開発中の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

59
58
6

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
59
58

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?