Skip to content

Instantly share code, notes, and snippets.

Last active November 19, 2023 20:48
  • Star 26 You must be signed in to star a gist
  • Fork 4 You must be signed in to fork a gist
Star You must be signed in to star a gist
What would you like to do?
Removing git lfs from (any) repository

So, it has been an interesting journey, but time to remove git-lfs. Here follows a summary of the approach I used to safely remove git-lfs,

  • commit & push everything
  • create a branch, something like fix/remove-lfs
  • remove hooks git lfs uninstall
  • remove lfs stuff from .gitattributes (open file, delete content - don't delete the file!)
  • list all lfs files, git lfs ls-files
  • run git rm --cached for each file
    • if your list is big, copy the contents into a file.txt
    • make sure you remove the number and asterik on each line, you only want the paths to the files
    • while read line; do git rm --cached "$line"; done < files.txt
  • run git add for each file
    • if you have a file.txt
    • while read line; do git add "$line"; done < files.txt
  • run a git status and make sure all the files were added properly
  • commit everything
git add .gitattributes
git commit -m "unlfs"
git push
  • check that no lfs files left with git lfs ls-files
  • remove any lfs, rm -rf .git/lfs

Once your branch (fix/remove-lfs) is merged into develop, your team doesn't need to do anything other than simply pulling and checking out the new state of the world, their repository will work as-expected without git lfs installed. If git lfs is still installed, simply let them uninstall it: git lfs uninstall

Credits: Fedor, Taylor, Chase, Simon

Copy link

@pavelsolis Yes, AFAIK. It had two typos, which I fixed. But make a backup beforehand if possible. You can copy the dir and if things go wrong, delete the messy one and rename the copy.

Copy link

Thanks! I tried it as git-lfs and git lfs, in both cases the output was 'lfs' is not a git command. Instead of installing lfs, what worked was to remove .git/lfs and .git/hooks/pre-push.

Copy link

danisztls commented May 12, 2021

You must have it installed to run it. But all git-lfs uninstall --local does is remove .git/hooks/pre-push. I think it will create problems if you didn't do the re-normalize stuff as you will have pointers to stuff that does not exist anymore. After pushing to origin, have you tried to clone the repo and see if things are alright?

Copy link

Hi, I tried doing this from top to bottom, and I think I messed something up: I removed Git LFS, but I still have pointers instead of the original files. I'm not really sure how to fix this. git lfs ls-files returns nothing, which I guess means LFS isn't tracking these files anymore. Does that mean my data is gone forever and I have pointers to nothing?

Copy link

anthonypena97 commented Mar 2, 2022

This really helped point the way! Thank you!

Copy link

Just to add to this, if you are tracking a ton of files, the following little Python script will create a new filenames.txt that that removes the number and asterisk from each line:

with open("filenames.txt", "w") as f:

with open("files.txt", "r") as f2:
    for line in f2:
        with open("filenames.txt", "a") as f:
            f.write(line.split(" ")[-1])

Copy link

Thank you so much for your help. I have been trying to do this for over a week and your guide finally let get rid of lfs.

Copy link

Created a Python script to do this:

Should work on all platforms (including Windows), and can generate a dry-run script for you to inspect. (Note the dry-run script won't actually edit your .gitattributes or your .git/lfs folder, it'll just show you the new contents of .gitattributes and verify the to-be-removed path)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment