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

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

概要

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

事前準備

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

手順

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

その後、Gitコマンドプロンプトでリポジトリのディレクトリにカレントディレクトリを移します。
リポジトリのディレクトリで下記のコマンドを実行します。

git reset --hard (コミットID)

今回の場合

git reset --hard 3ea4d6d4

コマンドを実行します。

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

HEADが3ea4d6d4の状態に戻ります。
Gitのリモートリポジトリへのファイル追加などのプッシュを無かったことにしたい:画像2

git push -f

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

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

プッシュ完了です。
Gitのリモートリポジトリへのファイル追加などのプッシュを無かったことにしたい:画像4

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

以上で作業は完了です。

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


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