我不能用git做很多事情,我想从我的仓库中删除一个提交,因为我上传了错误的东西。我使用了git revert <the_commit>,但由于提交是root用户,所以我不能删除它。fatal:无法恢复根提交在这种情况下该怎么办?请不要给予我链接到其他主题在这里,我读了他们,我不明白该怎么办,我需要一些基本的例子有关删除一些提交。
git revert <the_commit>
z31licg01#
您可以使用git filter-branch来完成此操作。首先,确定要删除的根目录中的提交ID。我用<the_commit>表示。然后,使用--parent-filter和一个sed命令运行git filter-branch,该命令将该父节点截断:
<the_commit>
--parent-filter
sed
git filter-branch
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 $
2hh7jdfx2#
要移除根提交,你只需移除所有可以访问它的分支(和标签)。这可以通过git branch -D branch-name来实现。(我想你必须先检查出另一个不引用这个根提交的分支,因为你不能删除当前分支。)如果你想保留这个分支上的其他提交,只删除根,git filter-branch更好,请参阅Greg的答案。
git branch -D branch-name
2条答案
按热度按时间z31licg01#
您可以使用git filter-branch来完成此操作。首先,确定要删除的根目录中的提交ID。我用
<the_commit>
表示。然后,使用--parent-filter
和一个sed
命令运行git filter-branch
,该命令将该父节点截断:下面是我刚刚尝试的一个示例的文本:
2hh7jdfx2#
要移除根提交,你只需移除所有可以访问它的分支(和标签)。
这可以通过
git branch -D branch-name
来实现。(我想你必须先检查出另一个不引用这个根提交的分支,因为你不能删除当前分支。)如果你想保留这个分支上的其他提交,只删除根,
git filter-branch
更好,请参阅Greg的答案。