Skip to content

Instantly share code, notes, and snippets.

@danechitoaie
Last active July 9, 2019 08:38
Show Gist options
  • Save danechitoaie/2b4df1dce14e601662777388fbcd93f5 to your computer and use it in GitHub Desktop.
Save danechitoaie/2b4df1dce14e601662777388fbcd93f5 to your computer and use it in GitHub Desktop.
Remove folder from Git history with Fish Shell
# Make a fresh clone of YOUR_REPO
git clone YOUR_REPO
cd YOUR_REPO
# Create tracking branches of all branches
for remote in (git branch -r | grep -v /HEAD)
git checkout --track (echo -n $remote | tr -d '[:space:]')
end
# Remove DIRECTORY_NAME from all commits, then remove the refs to the old commits
# (repeat these two commands for as many directories that you want to remove)
git filter-branch --index-filter 'git rm -rf --cached --ignore-unmatch DIRECTORY_NAME/' --prune-empty --tag-name-filter cat -- --all
git for-each-ref --format="%(refname)" refs/original/ | xargs -n 1 git update-ref -d
# Ensure all old refs are fully removed
rm -Rf .git/logs .git/refs/original
# Perform a garbage collection to remove commits with no refs
git count-objects -vH
git gc --prune=all --aggressive
git count-objects -vH
# Force push all branches to overwrite their history
# (use with caution!)
git push origin --all --force
git push origin --tags --force
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment