deepblue-will’s diary

JS、CSS,Ruby、Railsなど仕事や趣味で試した技術系のことを書いていきます。

Gitのリモートリポジトリに間違ってpushしてしまった時の対処法

最近、別のブランチを切るべきを変更を間違えてbranchを切らずにremoteのdevelop(master)にpushしてしまうということをやらかしました。「やべ!どうしよう!」と慌てないためにも、こういう時どうすれば備忘録がてら書いておこうと思います。

前提

developに間違って以下のコミット(8c28831)をpushしてしまい、本来作業するbranchでpushし直したい!

$ git log --oneline

8c28831 間違えてpushしたコミット
82697e5 commit2
05d2fd3 commit

手順

色々方法があると思いますが私はこうしてます。(もっとスマートな方法あったら教えて下さい。)

本来作業するはずだったbranchを間違えてpushしてしまったbranchから作成し、リモートへpush

$ git checkout -b feature/test # branchの作成&切り替え
$ git push origin feature/test # リモートへpush

間違えてpushしてしまったcommitをresetして戻して強制push

git reset --hard {番号}を使用するとその番号のコミットまで戻すことができます。 今回は8c28831のコミットを取り消し、82697e5の状態に戻したいので、以下のコマンド叩きます。

$ git reset --hard 82697e5

戻したらpushします。ただ普通にpushしようとすると怒られるので-fをつけて強制pushします。 この-fは強力なので先ほど切ったbranchにちゃんと8c28831があることを確認することをオススメします。

$ git push -f origin develop

強制pushする方法の他にも remote branchを消して作りなおす という方法もありますが、それはちょっと怖いのでこの方法でやってます。

GitHub実践入門 ~Pull Requestによる開発の変革 (WEB+DB PRESS plus)

GitHub実践入門 ~Pull Requestによる開発の変革 (WEB+DB PRESS plus)