Purge a file from history

Git, Repository, Remote · Apr 13, 2021

Completely purges a file from history.

  • Use git rm --cached --ignore-unmatch <path> to delete the file in the specified <path>.
  • Use git filter-branch --force --index-filter <command> --prune-empty --tag-name-filter cat -- --all to rewrite the branch's history, passing it the previous command.
  • You can optionally use git push <remote> --force -all to force push the changes to the remote repository.
  • ⚠️ WARNING: This is a destructive action that rewrites the history of the entire repository. Make sure you know what you are doing.
git filter-branch --force --index-filter \
  "git rm --cached --ignore-unmatch <path>" \
  --prune-empty --tag-name-filter cat -- --all
git push <remote> --force --all
git filter-branch --force --index-filter \
  "git rm --cached --ignore-unmatch config/apiKeys.json" \
  --prune-empty --tag-name-filter cat -- --all
# Purges `config/apiKeys.json` from history
git push origin --force --all
# Force pushes the changes to the remote repository

Written by Angelos Chalaris

I'm Angelos Chalaris, a JavaScript software engineer, based in Athens, Greece. The best snippets from my coding adventures are published here to help others learn to code.

If you want to keep in touch, follow me on GitHub or Twitter.

More like this