I want to change something in the first commit of my project with out losing all subsequent commits. Is there any way to do this?
I accidentally listed my raw email in a comment within the source code, and I’d like to change it as I’m getting spammed from bots indexing GitHub.
As mentioned by ecdpalma below, git 1.7.12+ (August 2012) has enhanced the option
--rootforgit rebase:“
git rebase [-i] --root $tip” can now be used to rewrite all the history leading to “$tip” down to the root commit.That new behavior was initially discussed here:
The patch followed.
(original answer, February 2010)
As mentioned in the Git FAQ (and this SO question), the idea is:
git reset --hardRebase branch on top of changed commit, using:
The trick is to be sure the information you want to remove is not reintroduced by a later commit somewhere else in your file. If you suspect that, then you have to use
filter-branch --tree-filterto make sure the content of that file does not contain in any commit the sensible information.In both cases, you end up rewriting the SHA1 of every commit, so be careful if you have already published the branch you are modifying the contents of. You probably shouldn’t do it unless your project isn’t yet public and other people haven’t based work off the commits you’re about to rewrite.