やなぎにっき

学んだことの記録

間違えてリモートリポジトリに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などの説明は省略してます
f:id:yana_g:20210216190602j:plain
f:id:yana_g:20210216191148j:plain
f:id:yana_g:20210216190628p:plain


以下実際に行った手順

元に戻りたいコミットを確認
今回の場合、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つで。 f:id:yana_g:20210218120517p:plain