GitLab、Gitでリモートリポジトリの最後の間違いpushの履歴を消してなかったことにする、歴史を巻き戻す方法

Git

Gitを使っていて、たまにやらかすのは、誤った変更をそのままpushして間違いが履歴に残ってしまうことです。

バージョン管理システム (VCS) のある姿としては、それはそのままにして、また修正をpushすれば問題はないのですが、できれば間違った履歴を残したくないものです。

そこで、誤ったpushを消して戻す方法を調べてみました。

スポンサーリンク
スポンサーリンク

gitで誤った最後のpush履歴の削除、歴史の巻き戻し方法

Gitには最強のコマンド、filter-branchというのがあり、歴史を書き換えることが可能です。

filter-branchの詳細は次の通りです。

git filter-branchで歴史の書換え、リポジトリのディレクトリ構成を移動、変更、削除する方法
git filter-branchでリポジトリの歴史の書換え、ディレクトリ構成を移動、変更、削除する方法をまとめまし...

ただ、ここまでやらずとも、出来れば穏便に簡単に最後のpushをなかったことにできないか、方法を調べてみました。

例えば、次の状態にあるとします。

ここで、A、B、C、Dはコミットのことです。

ローカルで変更を加えてDの状態になっています。

git push すると次のようになります。

ここで、D は間違いだったと気づいたとします。

さて、どうすればよいでしょうか?

まず、リモートリポジトリの master のバックアップ用のブランチを作ります。

これは必須ではありませんが、念のためです。

これで次の状態になります。

次に、リモートの master ブランチを削除します。

ローカルを一つ戻します。

リモートに push します。

すべてが順調にいって master_bak が要らなくなったら削除します。

これで通常はOKのはずです。

GitLabでエラー deleting the current branch is denied, because

ちなみに、私の所で、リモートの master ブランチを削除しようと以下のコマンドを実行しました。

すると、次のエラーが出ました。

うう?????

調べてみたところ、以下のページでは、リポジトリをbareにしろって書いてありましたが、問題は違うようです。

https://qiita.com/ssm_snow/items/3041be842cadf68e6d67

リモートリポジトリの設定確認

上記でfalseだったらtrueにする

GitLabで、deleting the current branch is denied の解決方法

GitLabの管理画面にログインしてリポジトリを確認します。

デフォルトブランチが、master になっているのが原因のようです。

デフォルトブランチは削除できません。

そこで、いったんデフォルトブランチを管理画面から、master_bakに変更しておきます。

その後、リモートの master ブランチを削除すると、

無事に削除が完了しました!