gitで特定のファイルの履歴を消す方法

$ git filter-branch --index-filter 'git rm --cached --ignore-unmatch targetfile' HEAD

これで、特定のファイルtargetfileの履歴を消去できる。
特定のディレクトリは

$ git filter-branch --index-filter 'git rm -r --cached --ignore-unmatch dir' HEAD

で特定のディレクトリdirが消える。-rオプションを忘れずに。
後は、コミットするだけ。

$ git commit -m 'delete targetfile'

リモートのリポジトリにもこの変更を反映させなければならない。
そういう場合は

$ git push origin master --force

でプッシュ。--forceを付けたのはリモートを強制的に上書きするため。
まだ、リモートにはブランチがのこってるので、それを消去

$ git branch -d delete-branch
$ git push origin delete-ranch

参考サイト

特定のファイルの履歴を消す方法 : Redirecting...
リモートのbranchを消去する方法 : Git で不要になったローカルブランチ・リモートブランチの削除 - sotarokのお勉強