how to remove one file from git history

C++
To replace all text listed in passwords.txt wherever it can be found in your repository's history, run:
bfg --delete-files YOUR-FILE-WITH-SENSITIVE-DATA
The BFG Repo-Cleaner is a faster, simpler alternative to git filter-branch for removing unwanted data. For example, to remove your file with sensitive data and leave your latest commit untouched), run:
bfg --replace-text passwords.txt

Source

Also in C++: