Git remove root commit

I can’t do a lot of things with git and I want to remove a commit from my repo, because I uploaded wrong stuff.

I used git revert <the_commit> but since the commit is root and I can’t remove it.
fatal: Cannot revert a root commit

  • Push only last commit with TortoiseGit
  • Is it possible to merge commits in git?
  • Smartgit Integrate Develop not available - Bitbucket # commits behind | # commits ahead
  • Mercurial (hg) commit only certain files
  • Git ghost commit
  • Git Commit during Git Rebase - what really happens?
  • What to do in that case ?

    Please don’t give me links to other topics here, I read them and I don’t understand what to do, I need some basic example about removing some commit.

  • How not to break git(hub) projects and still be useful
  • Git: Cloning gitosis admin repo locally
  • How to maintain a Github fork of a popular project
  • how can I set up a website to mirror whatever is pushed to git?
  • Git blame showing no history
  • How do I clean git repo leaving only the latest snapshot?
  • 2 Solutions collect form web for “Git remove root commit”

    For removing a root commit, you simply have to remove all branches (and tags) from which it is reachable.

    This can be done with git branch -D branch-name. (You will have to first check out another branch which does not refer to this root commit, since you can’t remove the current branch, I think.)

    If you want to retain other commits on this branch and only remove the root, git filter-branch is better, see the answer from Greg.

    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 <greg@example.com>
    Date:   Fri May 27 20:54:27 2011 +1200
    
        three
    
    commit a8a410d2361824cbd518a48225e9402a691be93f
    Author: Greg Hewgill <greg@example.com>
    Date:   Fri May 27 20:54:17 2011 +1200
    
        two
    
    commit 3171d512d98f6bc5f3c2469312930c0d32d3aa07
    Author: Greg Hewgill <greg@example.com>
    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 <greg@example.com>
    Date:   Fri May 27 20:54:27 2011 +1200
    
        three
    
    commit a6f5ee410c9ea4fca6fbff265149b7fc555241eb
    Author: Greg Hewgill <greg@example.com>
    Date:   Fri May 27 20:54:17 2011 +1200
    
        two
    $ 
    
    Git Baby is a git and github fan, let's start git clone.