Git remove root commit

You can do this using git filter-branch. First, identify the commit ID at the root that you want to remove. I’ll represent that with <the_commit>. Then, run git filter-branch using --parent-filter and a sed command that snips off that parent:

git filter-branch --parent-filter "sed 's/-p <the_commit>//'" HEAD

Here’s a transcript of an example I just tried:

$ git log
commit 7e1ba37b51fc2cc6289cf66367c9aedc74c664a8
Author: Greg Hewgill <[email protected]>
Date:   Fri May 27 20:54:27 2011 +1200

    three

commit a8a410d2361824cbd518a48225e9402a691be93f
Author: Greg Hewgill <[email protected]>
Date:   Fri May 27 20:54:17 2011 +1200

    two

commit 3171d512d98f6bc5f3c2469312930c0d32d3aa07
Author: Greg Hewgill <[email protected]>
Date:   Fri May 27 20:54:00 2011 +1200

    one
$ git filter-branch --parent-filter "sed 's/-p 3171d512d98f6bc5f3c2469312930c0d32d3aa07//'" HEAD
Rewrite 7e1ba37b51fc2cc6289cf66367c9aedc74c664a8 (3/3)
Ref 'refs/heads/master' was rewritten
$ git log
commit 489ec1ee20e0dd20cd835ceebf157f628cd75a44
Author: Greg Hewgill <[email protected]>
Date:   Fri May 27 20:54:27 2011 +1200

    three

commit a6f5ee410c9ea4fca6fbff265149b7fc555241eb
Author: Greg Hewgill <[email protected]>
Date:   Fri May 27 20:54:17 2011 +1200

    two
$ 

Leave a Comment