QA@IT

git rebase masterしたらmasterのコードに問題があったため、少し戻したい

2935 PV

前置き非常に長いですがお願いします。

ブランチはこんな感じになっており、リモートのmasterとローカルのmasterが一致するとします。
master
br1
remotes/origin/master

また、リモートのmasterブランチは完全に参照用で私が変更を加えることは一切ありません。
従ってローカルのmasterはリモートからpullするだけとなります。

あるタイミングでbr1ブランチをつくり、そちらで開発を行っていました。
その後リモートのmasterにいくつかのコミットが入ったため、まずローカルのmasterにpullしました。
$ git checkout master
$ git pull

その後br1をチェックアウトし、masterにrebaseしました。
$ git checkout br1
$ git rebase master

通常であればこれで問題ないと思うのですが、masterの最後のコミットに問題があり
br1での開発が正常通り続けられないということになってしまいました。

このままでは困るので、remoteのマスターが正常に戻るまで何かしらの方法で回避し、
remoteが修正された段階で再度 $ git rebase master することで開発を続けるというふうにしたいのです。

ここまで前置き非常に長かったですが、
質問はこう言った場合の回避策はあるでしょうか、というものです。

理想的にはmasterのHEADまでrebaseしてしまったものを、一つだけ戻すというふうにしたいです。

・rebase前
        b1-b2-b3
       /
m1-m2-m3-m4-m5-m6

・rebase後
                  b1-b2-b3  
                 /
m1-m2-m3-m4-m5-m6

・m6に問題があったのでこのように変更したい
               b1-b2-b3  
              /
m1-m2-m3-m4-m5-m6

回答

br1ブランチにチェックアウトして、m6に対応するコミットを削除すればよいと思います。
具体的には、br1にチェックアウト後、

  1. git rebase -i HEAD~4
  2. エディタが立ち上がるので「m6」に対応するコミットの行を削除、保存。 で意図した状態になると思います。
編集 履歴 (0)
  • できました!そしてgit rebaseの勉強にもなりました。
    ありがとうございます。
    -
ウォッチ

この質問への回答やコメントをメールでお知らせします。