I really wanted to remove a huge binary file from a Git repository that has been committed by mistake. I found a bash script on the internet but the data still remained in the .git directory.
After some changes I came to this solution that really worked for me. But do not try that at home, it might corrupt your data!
#!/bin/bash set -o errexit if [ $# -eq 0 ]; then exit 0 fi if [ ! -d .git ]; then echo "Error: must run this script from the root of a git repository" exit 1 fi files=$@ git filter-branch --prune-empty --index-filter "git rm -rf --cached --ignore-unmatch $files" HEAD rm -rf .git/refs/original/ && git reflog expire --expire=now --all && git gc --aggressive --prune=now && git repack -a -d -l