How to Remove a Large File from Commit History in Git?

Step 1: Check the Size of Git History

du -hs .git/objects

Step 2: Create a script to find larges files

#set -x
# Shows you the largest objects in your repo's pack file.
# Written for osx.
# @see
# @author Antony Stubbs
# set the internal field spereator to line break, so that we can iterate easily over the verify-pack output
# list all objects including their size, sort by size, take top 10
objects=`git verify-pack -v .git/objects/pack/pack-*.idx | grep -v chain | sort -k3nr | head`
echo "All sizes are in kB's. The pack column is the size of the object, compressed, inside the pack file."output="size,pack,SHA,location"
for y in $objects
# extract the size in bytes
size=$((`echo $y | cut -f 5 -d ' '`/1024))
# extract the compressed size in bytes
compressedSize=$((`echo $y | cut -f 6 -d ' '`/1024))
# extract the SHA
sha=`echo $y | cut -f 1 -d ' '`
# find the objects location in the repository tree
other=`git rev-list --all --objects | grep $sha`
#lineBreak=`echo -e "\n"`
echo -e $output | column -t -s ', '

Step 3: Find Top 10 Large files


Step 4. Install git-filter-repo

pip3 install git-filter-repo

Step 5: Remove large files from the .git history

git filter-repo --force --path <large file path> --invert-paths

Step 6: Clean Unused Fils

git reflog expire --expire=now --allgit gc --prune=now

Step 7. Add Git Remote URL and Push Back the Result

# Add Your Github URL
git remote add origin <Your Github URL>
# Push the result to all the branches
git push --all --force
# Push the result to origin repo
git push -u origin --all
git push -u origin --tags -f




Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Eric Wei

Eric Wei

Senior Full Stack Engineer & Solution architecture | AWS, GCP, Azure | Cloud, Unity Game Development, SDK, DevOps, and more.