ファイルやディレクトリを、全てのコミット履歴から削除して、完全に存在しなかった物とする手順です。
注意!
チームで開発している場合、この手順でファイルを削除すると、コンフリクトを起こします。
それでも、IDやパスワードを記載してしまったソースコードをコミット、プッシュした場合に、どうしてもファイルを削除したい場合があると思います。そういう場合にプロジェクトマネージャーに相談して、この手順でファイルを削除した後、プロジェクトメンバーにリポジトリをプルして貰いましょう。
最良の方法はコミットと同時にプッシュしない事です。SourcetreeのようなGUIツールを使っているとやりがちですが、後で変更したくなったり、面倒な事になる事があります。(実際何度もなりました。)
削除
全てのコミット履歴から、ファイルを削除します。
1 |
$ git filter-branch --tree-filter "rm -f <削除したいファイルパス>" HEAD |
ディレクトリを消す場合は、-rオプションを追加します。
1 |
$ git filter-branch --tree-filter "rm -f -r <削除したいディレクトリパス>" HEAD |
不要となったファイルを削除
1 |
$ git gc --aggressive --prune=now |
上記の削除手順だけでは、ファイル自体は残っている場合があります。ガベージコレクションを実行し、不要となったファイルやディレクトリを削除します。
プッシュ
1 |
$ git push -f |
リモートリポジトリにプッシュします。コンフリクトが発生しているので、-fオプションを付けて強制的にプッシュします。
宮崎県在住。
プログラムを書いて暮らしています。趣味はルアーフィッシング、ギター。