Gitのリモートリポジトリへのファイル追加などのプッシュを無かったことにしたい - Git

Gitのリモートリポジトリへのファイル追加などのプッシュを無かったことにしたい場合の手順について紹介します。

概要

リモートのリポジトリに不要なファイルをプッシュしてリモートリポジトリに不要なファイルを追加してしまった場合に、後からファイルの削除のプッシュではなく、ファイルの追加そのもののプッシュを無かったことにしたい場合があります。この記事では、Gitのリモートリポジトリへのファイル追加などのプッシュを無かったことにする手順を紹介します。

事前準備

ファイル追加する直前のリポジトリのコミットIDを調べます。間違いをやらかしてしまったコミットIDではなく、その一つ手前のコミットIDです。今回の場合IDは"3ea4d6d4"でした。

手順

"hard"をパラメータに付与するため、作業ディレクトリが前の状態に戻されてしまうため、ローカルのリポジトリのディレクトリをコピーしてバックアップを取ります。

その後、Gitコマンドプロンプトでリポジトリのディレクトリにカレントディレクトリを移します。
リポジトリのディレクトリで下記のコマンドを実行します。
git reset --hard (コミットID)
今回の場合
git reset --hard 3ea4d6d4
コマンドを実行します。


HEADが3ea4d6d4の状態に戻ります。


git push -f
コマンドを実行して、HEADが3ea4d6d4の状態をプッシュします。


プッシュ完了です。


バックアップしてあるローカルリポジトリから、変更のあったファイルをローカルリポジトリに移動して上書きします。上書き後、ローカルリポジトリへのコミット、リモートリポジトリへの同期を実行して、誤った変更以外の変更をリポジトリに反映します。

以上で作業は完了です。
補足
この記事で紹介した、git reset コマンドはreset処理を取り消すことはできないことと、他の開発者が作業を始めている可能性があるため、 リスクの高い方法です。一般的には、git revert を利用して履歴を残しつつ過去の状態に戻す方法を利用します。 git revert の利用についてはこちらの記事(gitリポジトリのロールバック)を参照してください。

著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
掲載日: 2017-11-30
iPentec all rights reserverd.