Git で master ブランチのコミットを元に戻す方法

GItでmasterブランチを元に戻す方法

こんばんは、エンジニアの眠れない夜です。

Git で master ブランチの戻し方が分からなくて困っていませんか?

いきなり結論(極論)ですが、「masterブランチを戻すことはできません!」

なので一旦削除して再度master ブランチをコミットし直す必要があります。

Git master ブランチのコミットを元に戻す方法

  1. ウェブページ(Github・Gitlabなど)でデフォルトのブランチを変更する
    +ブランチの保護を解除する)
  2. 元に戻したいマスターのバージョンからブランチを作成する
  3. master ブランチのバックアップを作成する
  4. master ブランチを削除する
  5. master ブランチを作成・プッシュする
  6. いらなくなったブランチを削除する
  7. デフォルトブランチを master ブランチに戻す

手順が多くてめんどくさそうですが1番の「ウェブページでデフォルトのブランチを変更する」ところさえやってしまえば1〜6番はコマンドを実行するだけなので、それほど面倒ではありません。

master ブランチを削除するには一度GithubやGitlabなどのウェブページにアクセスしてmaster ブランチの保護を解除したりデフォルトブランチの設定を変更する必要があります。

デフォルトブランチを変更したり、保護を解除していない場合はリモートのmaster を削除することができません

リモートの master ブランチを削除しようとするとこのようなエラーが出ます。

git push origin :master

remote: error: refusing to delete the current branch: refs/heads/master
To git@github.com:***/***.git
! [remote rejected] master (deletion of the current branch prohibited)
error: failed to push some refs to 'git@github.com:***/***.git'
remote: GitLab: You can only delete protected branches using the web interface.
To gitlab.com::***/***.git
! [remote rejected] master (pre-receive hook declined)
error: failed to push some refs to 'git@gitlab.com::***/***.git'

1.Github・Gitlabでデフォルトのブランチを変更する

デフォルトブランチを変更する方法(Github)

Githubのリポジトリのページに進んで画面右上のセッティングの歯車のマークを選択します。

デフォルトブランチを変更する方法(Github)

画面左にブランチーズという項目があるのでそちらを選択しますするとデフォルトブランチがマスターになっているのがわかります。この master を他のブランチに変更してください。

デフォルトブランチを変更、保護解除する方法(Gitlab)

Gitlabのホームページにアクセスして画面左の歯車のマークからリポジトリを選択します。

デフォルトブランチを変更、保護解除する方法(Gitlab)1

一番上にデフォルトブランチという項目があるので expand を選択するとデフォルトブランチが表示されます。

デフォルトブランチを変更、保護解除する方法(Gitlab)3

現在はマスターになっているので他のブランチを選択してください。

もう少し下に進めるとプロテクトブランチという項目がありますこの項目を開くと下の方にProtected Branchesに master が登録されているのがわかります。

デフォルトブランチを変更、保護解除する方法(Gitlab)2

これを「Unprotect」を選択してプロテクトを解除してください。(↑オレンジのボタン)

これでマスターブランチを削除できるようになりました。

2 ~6 Gitでmasterブランチを戻す

「戻したいコミットのハッシュ値」の部分だけ置き換えてコピペをすれば master ブランチのバージョンを戻せます。

元に戻したいコミットのハッシュ値を確認するにはgit logで確認できます。

ハッシュ値の例)8f7fc6bb8824afa2c512213f60e235e9bfd21ec9

アプリケーションを利用している場合は Commit という項目でハッシュ値を確認できます。

アプリケーションから戻したいコミット(状態)にチェックアウトできる場合はgit checkout 「戻したいコミットのハッシュ値」を飛ばして下記のコマンドを実行すれば大丈夫です。

※ Gitが操作できるディレクトリで下記のコマンドを実行してください。

# 新しいブランチを作成
git checkout 「戻したいコミットのハッシュ値」
git branch new_master

# master のバックアップを作成
git checkout master
git branch master_backup

# master を削除
git branch -D master
git push origin :master

# new_master から新しいmasterを作成・プッシュ
git checkout new_master
git branch master
git push origin master

# 要らなくなったブランチを削除する
git branch -D new_master
git branch -D master_backup

これでマスターブランチを無事に元に戻すことができました。

7.デフォルトブランチをmasterブランチに戻す

1番で設定を変更したデフォルトブランチをGithubやGitLabのリポジトリの設定から Master ブランチに戻して作業完了です。

まとめ

コマンドの実行で簡単にできるとは言いましたが、他のブランチに比べてmasterブランチを元に戻すのはすごく面倒です…

masterブランチにコミットするときはすごく慎重になりましょう。

1人で開発をしている場合は

「普段はサブのブランチを作成してそちらをメインで使いつつ、安定している時に時々masterブランチにマージする」

という運用方法がいいかなと個人的には思います。

Git で master ブランチを元に戻したい方の参考になれば幸いです。

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.