git-filter-repo
A versatile tool for rewriting Git history.
TLDR
Replace a sensitive string in all files
$ git filter-repo --replace-text <(echo '[find]==>[replacement]')
Extract a single folder, keeping history
$ git filter-repo --path [path/to/folder]
Remove a single folder, keeping history
$ git filter-repo --path [path/to/folder] --invert-paths
Move everything from sub-folder one level up
$ git filter-repo --path-rename [path/to/folder/:]