[英]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.