画竜点睛を衝く@mapyo

日々やった事をつらつらと書くブログです

gitで間違ってmergeしてmasterにpushしてしまった時にどうすればよいか考える

前回の検証でまずいという事が判明した。

gitで間違ってmergeしてしまったものをrevertして再度mergeするとどうなるかを検証する。 - 画竜点睛を衝く@mapyo

これに対応する為に、qiitaに投稿したところ、いくつか対応案を頂いたので、 それを検証してみたいと思う。今回は案を書くだけ。

その前に、前提を書く。

前提

  • チームで開発している
  • githubとかそういう系を使ってる
  • グループで共有してリポジトリを使っている
  • gitに不慣れな人もいるため、出来ればrebaseを使いたくない。
  • それなりに大きな修正で50%くらい作業した段階で間違ってやっちゃったパターン

対応案

 シナリオ1

  1. 開発中のhogehogeブランチで作業中、間違ってmasterにマージしてpushしてしまった!!
  2. 間髪入れずに周りの人にごめんなさいして、マージされる前の状態にmasterを戻す。
  3. push -f 使う。

これが一番いいような気がする。

シナリオ2

  1. 開発中のhogehogeブランチで作業中、間違ってmasterにマージしてpushしてしまった!!&他の人が既にcommitしてしまってた!
  2. masterにマージした内容をリバート&push   ここでひとまず、masterは安心。
  3. masterの内容をhogehogeブランチにmergeする。
  4. masterでrevertした内容がhogehogeブランチ上でなかった事にされてしまっているので、hogehogeブランチ上でmasterでrevertした内容を再度revert
  5. masterでは開発が進む
  6. hogehogeブランチでも開発は進む
  7. hogehogeブランチで開発が終わったので、hogehogeブランチの内容をmasterに反映させる。

上の次にこれがいいような気がする。 (rebase恐怖症)

シナリオ3

  1. 開発中のhogehogeブランチで作業中、間違ってmasterにマージしてpushしてしまった!!&他の人が既にcommitしてしまってた!
  2. masterにマージした内容をリバート&push   ここでひとまず、masterは安心。
  3. masterにマージ済みのところから生えるようにhogehogeブランチをrebaseして作業を続ける
  4. masterでは開発が進む
  5. hogehogeブランチでも開発は進む。
  6. hogehogeブランチで開発が終わったので、hogehogeブランチの内容をmasterに反映させる。

本当は履歴が綺麗になるからこの方法がシナリオ2よりもいいと思う。

シナリオX

そもそも、masterに直接push出来ないようにして、全てプルリクベースでmasterにmergeするようにする。 (そんな事出来るのかな。。。)

結論

書いている間にだいぶ熱が覚めて来た感があるので、もしかしたらこのシリーズはこれで終わりになるかもしれませんw