我不能用git做很多事情,我想从我的repo中删除一个提交,因为我上传了错误的东西。
我使用git revert <the_commit>
,但由于提交是root,我无法将其删除。
致命的:无法还原根提交
在这种情况下该怎么办?
请不要在这里给我链接到其他主题,我阅读它们并且我不明白该怎么做,我需要一些关于删除一些提交的基本示例。
答案 0 :(得分:19)
您可以使用git filter-branch执行此操作。首先,确定要删除的根的提交ID。我将用<the_commit>
表示。然后,使用git filter-branch
和--parent-filter
命令运行sed
,该命令会删除该父级:
git filter-branch --parent-filter "sed 's/-p <the_commit>//'" HEAD
以下是我刚试过的一个例子的成绩单:
$ 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
$
答案 1 :(得分:4)
要删除root提交,只需删除可以访问的所有分支(和标记)。
可以使用git branch -D branch-name
完成此操作。 (您必须首先检查另一个不引用此根提交的分支,因为您不能删除当前分支。)
如果你想在这个分支上保留其他提交并且只删除根,git filter-branch
更好,请参阅Greg的答案。