備忘録です。
リモートmasterブランチを過去の状態に直し復活させることを実現します。
#経緯
デプロイ時に全く予測のできないエラーと遭遇し、ログを読み仮説・検証をしても解決されませんでした。全くエラーの原因が予想できなかったため、エラーが起きる直前に戻したいと思いました。しかし、個人開発ということもあり、簡単にたくさんのマージしてしまった(慎重に行うべきでした、反省です)ので、masterブランチを過去の状態に戻すしか方法が考えられませんでした。
#注意
この方法は個人開発のみ推奨です。チームで開発の場合は推奨しません。
(そもそも過去の情報にすり替えることは推奨されません。)←ここ重要!
また、マイグレーションファイル(あるいはschemaやその他)の情報とのズレに気をつけてください。テスト環境でデータベースが壊れた場合や、syntax errorが起きて手に負えなくなった場合、database.yml等を修正して、他のデータベースを作成して、そこで保存する様にしてください。
私自身約2ヶ月前にプログラミングの勉強を始めたばかりの初学者です。
実行した行動を思い出しながら書いているため、内容に誤りがあると思いますので、今後内容修正するかもしれませんが、ご理解の程よろしくお願いいたします。
#やり方
GitHubの画面から、Settings→Branchesをクリックし、Default Branchの設定画面に飛ぶ。
デフォルトのブランチ(masterブランチ)がセットされた状態では削除できないため、masterブランチ以外を選択。なお、ここでは新しくmasterとして扱いたいコードを持つブランチを選択しUpdateすると良いでしょう。
そして、以下のコマンドを実行し、元々のmasterを削除する。
% git push origin :master
Github Desktop上で、元々のmasterブランチを選択した状態で以下のコマンドを実行し、任意の名前に変える。
(元々のmasterはもう必要ないので、本当にテキトーな名前で大丈夫です。)
% git branch -m <任意の名前>
次に、masterブランチにしたい情報を持つブランチをCurrent Branchとしてセットした状態で、以下のコマンドを実行する。
% git branch -m master
新しいmasterブランチとしてプッシュする
% git push origin master
これで、過去に作ったブランチの情報を元に、新しいmasterを生成することができました。
masterの元となるブランチと、新しく作ったmasterブランチの情報が等しくなりました。
再度Default Branchの設定画面で、ブランチを新しいmasterに切り替えておくおことを忘れない様にしましょう。
新しいmasterのFetchとPushについて
今回の様な形で新しくmasterを作った場合は、通常通りの方法でPushができなくなります。
masterを最新の状態にする場合は、必ず新しいブランチを用いて下記の手順を踏んでください。
① masterブランチを選んだ状態で、Choose a branch to merge into master
② 更新した最新のブランチを選択して、Merge 最新のブランチ into master
#補足
今までデプロイをしてきた場合、過去の情報にすり替えたもので上書きすることはできません。そういった場合は、デプロイしたアプリを一度削除し、再度アプリをデプロイし直す必要があります。
また、冒頭でも述べました様に、マイグレーションファイル等とのズレが起きてしまう可能性があることを留意し実行してください。
#参考記事
https://qiita.com/suin/items/96c110b218d919168d64
https://qiita.com/pugiemonn/items/34b56b1aa757e33133e4