Some time ago I added info(files) that must be private. Removing from the project is not problem, but I also need to remove it from git
history.
I use Git and Github (private account).
On this thread Shows something similar but here is an old file that was added to a feature branch, that branch merged to a development branch and finally merged to master, since this, a lot of changes was done. So it's not the same and what is needed is to change the history, and hide that files for privacy.
I have found this answer and it helped:
Found it here https://myopswork.com/how-remove-files-completely-from-git-repository-history-47ed3e0c4c35
I used this GitHub article to use this, which led me to this command (similar to the accepted answer, but more robust):
Using the bfg repo-cleaner package is another viable alternative to
git-filter-branch
. Apparently, it is also faster...If you have recently committed that file, or if that file has changed in one or two commits, then I'd suggest you use
rebase
andcherrypick
to remove that particular commit.Otherwise, you'd have to rewrite the entire history.
When you are satisfied with the changes and have duly ensured that everything seems fine, you need to update all remote branches -
Note:- It's a complex operation, and you must be aware of what you are doing. First try doing it on a demo repository to see how it works. You also need to let other developers know about it, such that they don't make any change in the mean time.
remove the file and rewrite history from the commit you done with the removed file(this will create new commit hash from the file you commited):
git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch PATH-TO-YOUR-FILE-WITH-SENSITIVE-DATA' --prune-empty --tag-name-filter cat -- --all
now force push the repo:
git push origin --force --all
now tell your collaborators to
rebase
.