概要
Git管理されたプロジェクトで過去のコミットを消したい場合、主に2パターンの方法があります。その手順をここにまとめます。
過去の履歴を書き換えるこれらの操作は、複数人で取り組んでいるプロジェクトなどで問題につながる可能性があります。十分注意して、これらの操作をしても大丈夫な事を確認してから行ってください。
本文
準備した環境について
コミットごとに1つのtextファイルを追加していき、5つのtextファイルを作成しました。これを使って動作を確認していきます。
リバート
過去の特定のコミット1つをピンポイントで消します。(削除した痕跡は履歴上に残ります)
消したいコミットを選択して右クリック。このコミットを打ち消し(macの場合はコミット適用前に戻す)を選びます。
これでno3.txtファイル追加のコミットがピンポイントで消えました。
履歴には「コミットを消した」ログが残ります。
リセット
今度は特定のコミットまで巻き戻る形でコミットを削除します。巻き戻りなのでその過程のコミットはすべて削除され、「削除した履歴」は残りません。
さかのぼりたい地点を選択して右クリック。現在のブランチをこのコミットまでリセット(macの場合は~をこのコミットまで戻す)を選びます。ポップアップが表示されるので、モードを選択します。3つのモードそれぞれで挙動が変わりますが、今回は「Hard」を選びます。
これで選択していた「no2.txt追加」をコミットしたタイミングまで戻ることができました(それ以降の操作はすべて消えています)
履歴を見るとリモートにプッシュした分(origin/feature/test005)は残っていますがローカルの履歴(feature/test005)は綺麗に巻き戻っているのが確認できます。「削除した履歴」も残っていません。
変更をリモートにプッシュする時警告が表示されると思います。(リモートに存在する履歴を消そうとする操作に対して注意を促してくれています)その時は強制プッシュ(フォースプッシュ)をすればリモートも更新することができます。安全を確認したうえで行ってください
フォースプッシュをしたら、リモートリポジトリも無事巻き戻った状態になりました。