繁体   English   中英

如何从git历史记录中完全删除提交

[英]How to completely remove a commit from git history

我必须从本地git仓库中删除最后5个提交,我是通过reset --hard删除到新的HEAD提交的:

git reset --hard abcde1

现在,我需要从历史记录中删除那些未引用的提交,在这里阅读许多答案之后,我尝试运行以下内容。

git gc --prune=now

git prune --expire=now --agressive

我发现的答案似乎都不适合我,例如,我仍然可以看到git show <sha>的那些提交,我在这里遗漏了什么? 是否可以从历史记录中完全删除提交?

最后,如果我推送一个新的源(比如说它是一个全新的仓库),那些未引用的提交也会被推送吗?

未引用或孤立的提交不会被推送到原点。 这些提交将在某个时候被git的垃圾收集删除。 如果要强制垃圾收集,请执行此操作

git config gc.reflogexpireUnreachable = now
git gc --prune=now
git config gc.reflogexpireUnreachable = "2 days"

查阅gitscm,它具有关于如何完全删除资源的良好资源。 但是,我认为您关于推动新起点的问题会导致更简单的解决方案。

在您推送的分支中的提交中未引用的对象不会发送到服务器。 我建议将存储库克隆到一个干净的目录中,从现有目录中拉出,然后推送到您想要的任何目的地。 它将为您提供一个干净的.git目录,其中仅包含引用的对象。

您是否要真正从历史中“删除”? 您可以这样做,但是如果有人已经进行了更改,那么他们的历史将很有趣。

因此,您可能想做的是

git reset --hard <sha1-commit-id>//the commit you want to get rid of
git push origin HEAD --force

在执行此操作之前,请备份! 同样,如果有人已经撤消了您的更改,则准备好听恐怖故事。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM