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

スポンサーリンク
Git

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

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

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

 

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

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

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

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

 

ただ、ここまでやらずとも、出来れば穏便に簡単に最後の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にしろって書いてありましたが、問題は違うようです。

git pushでremote rejectedと怒られた時にやったことメモ - Qiita
サーバー1’サーバー2’クライアント(Netbeans)とgit cloneして、サーバー2に対してgit pushしようとしたら以下のようなメッセージが。 そのときにやったことメモ ``` remote: error: refu...

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

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

 

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

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

 

 

 

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

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

 

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

 

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

 

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

 

 

コメント