使用場面

ローカルで作業中に、必要のないファイル(例:IDEの設定ファイル、一時ファイル、パスワードを含むファイルなど)の変更を一緒にコミット、プッシュしてしまったことがありました。
そこで、その変更をリモートリポジトリから削除する一方で、ローカルではその変更を保持して置く方法について残しておきたいと思います。

Git操作

方法1:誤ったコミットの履歴を残す方法

この方法は、誤ったコミットの履歴を残したまま、リモートリポジトリから特定のファイルの変更だけを削除したい場合に有効です。

コミットIDを確認:
git log で、誤ってpushしたコミットの1つ前のコミットIDを確認します。
ファイルを以前の状態に戻す:
git checkout <確認したコミットID> <ファイル名> で、指定したファイルを以前の状態に戻します。
ファイルの以前の状態をコミット:
git commit -m "不要なファイルの変更を削除" のように、変更をコミットします。
リモートリポジトリにpush:
git push origin <ブランチ名> で、変更をリモートリポジトリにpushします。
ファイルを誤ったコミットを行なった際の状態に戻す
git checkout <確認したコミットID> <ファイル名> で、ファイルを誤ったコミット、プッシュを行なった際の状態に戻します。

方法2:誤ったコミット履歴を残さない方法

この方法は、誤ったコミット自体をなかったことにしたい場合に有効です。

最新のコミットを取り消す:
git reset --soft HEAD^ で、最新のコミットを取り消します。変更はステージングエリアに残ります。
不要なファイルをステージングから除外:
git reset HEAD <ファイル名> で、不要なファイルをステージングエリアから除外します。
修正した内容をコミット:
git commit -m "修正した内容でコミット" のように、修正した内容を新しいメッセージでコミットします。
リモートリポジトリに強制的にpush:
git push -f origin <ブランチ名> で、修正後のコミットをリモートリポジトリに強制的に反映します。
注意: 強制的にpushすると、リモートリポジトリの履歴が書き換わります。
チームで作業している場合は、他のメンバーに影響がないか確認してから実行してください。