間違えてリモートリポジトリにmainブランチでpushしてしまった時の対処
自分が作業したコミットをpushしプルリクエストを作成しようとしたところ、プルリクエスト作成画面が表示されずにそのままリモートリポジトリのmainにコミットがマージされてしまいました。
原因はリモートリポジトリのmainからブランチを切らずにmainに直接コミットしてしまったこと、またそのままgit push origin main
でpushしたことでした。
同じbranchにpushした時は自動でマージされることを忘れていた……。
私は現在FJORD BOOT CAMP で勉強をしているのですが、Slackのwakaranチャンネル(文字通り分からないことがあった時に質問できる)でヘルプを出したところ色々教えていただき、無事解決したので手順などを書いておこうと思います。
前提
mainに直接追加したコミットをpushしてマージされてしまった状態から、コミットを別のブランチとしてpushしてPullRequestを作成したい
手順
Gitのリモートリポジトリに間違ってpushしてしまった時の対処法 - deepblue-will’s diary を参考にさせていただきました。
イメージとしてはざっとこんな形
リモートへのpushなどの説明は省略してます
以下実際に行った手順
元に戻りたいコミットを確認
今回の場合、fb12441
まで戻りたいとする
$ git log --oneline
f61f954 自分が追加したcommit3
1a6f04f 自分が追加したcommit2
0afad59 自分が追加したcommit1
fb12441 commit
mainブランチ上でブランチをコピーする
この時に本来つけたかったブランチ名を指定する
$ git checkout -b develop
コピーしたブランチに想定通りのコミットがあるか念のため確認する
$ git log --oneline
コピーしたブランチをpushする
$ git push origin develop
ブランチをmainにチェックアウトする(忘れがちだけど大事)
$ git checkout main
間違えてpushしてしまったコミットをresetして取り消す
自分が変更する前の状態のコミットを指定する
$ git reset --hard fb12441
強制pushする(普通にpushしようとすると怒られる)
$ git push -f origin main
これで無事間違えてpushした変更が元に戻り、プルリクエスト作成画面が表示されるようになりました🎉
コミットをresetしたり強制pushするのは神経を使うので、今後mainブランチを変更する際はちゃんとブランチを切ることを忘れないようにしたいと思います。
【追記】
FJORD BOOT CAMP のSlackにてさらにManaging a branch protection ruleでブランチの保護設定ができることを教えて貰いました!
リポジトリ画面のSettings(設定)→Branches(ブランチ)からmainブランチに直接pushできないように設定しました。
いろいろ設定できるようですが個人学習用のリポジトリなのでとりあえずこの最低限の2つで。