Git删除root提交

Ale*_*lov 12 git commit root

我不能用git做很多事情,我想从我的仓库中删除一个提交,因为我上传了错误的东西.

我使用git revert <the_commit>但是因为提交是root而我无法删除它.致命:无法恢复根提交

在那种情况下该怎么办?

请不要在这里给我链接到其他主题,我读了它们,我不明白该怎么做,我需要一些关于删除一些提交的基本示例.

Gre*_*ill 19

你可以使用git filter-branch来做到这一点.首先,确定要删除的根的提交ID.我代表那个<the_commit>.然后,git filter-branch使用--parent-filtersed剪切该父项的命令运行:

git filter-branch --parent-filter "sed 's/-p <the_commit>//'" HEAD
Run Code Online (Sandbox Code Playgroud)

这是我刚试过的一个例子的成绩单:

$ 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
$ 
Run Code Online (Sandbox Code Playgroud)


Paŭ*_*ann 4

要删除根提交,您只需删除可访问它的所有分支(和标签)。

这可以通过 来完成git branch -D branch-name。(我认为,您必须首先检查不引用此根提交的另一个分支,因为您无法删除当前分支。)

如果您想保留此分支上的其他提交并仅删除根,git filter-branch更好,请参阅 Greg 的答案。