Created
November 22, 2011 09:08
-
-
Save bububa/1385254 to your computer and use it in GitHub Desktop.
remove git sensitive file from history
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
For all practical purposes, the first thing you should be worried about is CHANGING YOUR PASSWORDS! It's not clear from your question whether your git repository is entirely local or whether you have a remote repository elsewhere yet; if it is remote and not secured from others you have a problem. If anyone has cloned that repository before you fix this, they'll have a copy of your passwords on their local machine, and there's no way you can force them to update to your "fixed" version with it gone from history. The only safe thing you can do is change your password to something else everywhere you've used it. | |
With that out of the way, here's how to fix it. GitHub answered exactly that question as an FAQ: | |
git filter-branch --index-filter 'git update-index --remove filename' <introduction-revision-sha1>..HEAD | |
git push --force --verbose --dry-run | |
git push --force | |
Keep in mind that once you've pushed this code to a remote repository like GitHub and others have cloned that remote repository, you're now in a situation where you're rewriting history. When others try pull down your latest changes after this, they'll get a message indicating that the the changes can't be applied because it's not a fast-forward. To fix this, they'll have to either delete their existing repository and re-clone it, or follow the instructions under "RECOVERING FROM UPSTREAM REBASE" in the git-rebase manpage. | |
In the future, if you accidentally commit some changes with sensitive information but you notice before pushing to a remote repository, there are some easier fixes. If you last commit is the one to add the sensitive information, you can simply remove the sensitive information, then run: | |
git commit -a --amend | |
That will amend the previous commit with any new changes you've made, including entire file removals done with a git rm. If the changes are further back in history but still not pushed to a remote repository, you can do an interactive rebase: | |
git rebase -i origin/master | |
That opens an editor with the commits you've made since your last common ancestor with the remote repository. Change "pick" to "edit" on any lines representing a commit with sensitive information, and save and quit. Git will walk through the changes, and leave you at a spot where you can: | |
$EDITOR file-to-fix | |
git commit -a --amend | |
git rebase --continue | |
For each change with sensitive information. Eventually, you'll end up back on your branch, and you can safely push the new changes. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment