I have a file in my GitHub repository that I would like to remove from my previous commits. I used BFG Repo-Cleaner's delete-files
command and it appeared to work, but when I go on my GitHub repository the file is still on all the previous commits. If I try and do the command again, it gives me a
BFG aborting: No refs to update - no dirty commits found??
Am I misunderstanding how BFG works? If so how can I remove the file from my past commits on GitHub?
Here are the steps I took:
- Cloned a copy of my GitHub repo into a local folder using the
--mirror
flag. - I then
cd
to my local visual studio project. - I then entered in the command
java -jar bfg-1.12.1.13.jar --delete-files <.json file I wanted to delete> <my local clone copy from step 1>.git
- I then entered in
git reflog expire --expire=now --all && git gc --prune=now --aggressive
- Ran
git push
A git push
alone should not work, since BFG repo cleaner does rewrite the history of a repo.
It should work though when you cloned (as you did) with --mirror
, since, on git push
, locally updated refs will be force updated on the remote end.
Note that:
By default the HEAD branch is protected, and while its history will be cleaned, the very latest commit (the 'tip') is a protected commit and its file-hierarchy won't be changed at all.
Don't forget to remove your file from your HEAD (current working tree) as well, before pushing back.
After discussion, it seems the commands were not executed in the right folder. That folder should end with .git
: xxx.git
: a clone --mirror
is a bare repo.
Skip step 2 in your steps and it should work (don't cd
into your <repo-name>.git
).
You need to run BFG from the folder that contains the folder <repo-name>.git
. BFG is looking for a folder called <repo-name>.git
in the working directory. That's why it didn't change anything.
来源:https://stackoverflow.com/questions/39682046/removing-files-from-past-commits-in-github-repository-with-bfg-repo-cleaner