Git does have a mechanism to remove data from history. It's ugly, and you end up with new commit hashes, but it works. It was designed for situations in which a developer accidentally adds something sensitive, like a production database snapshot, to source control.