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

3

我需要从本地git仓库中删除最近的五个提交记录,我使用reset --hard命令回退到新的HEAD提交记录来完成此操作:

git reset --hard abcde1

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

git gc --prune=now

并且

git prune --expire=now --agressive

我找到的所有答案似乎都对我不起作用,例如我仍然可以通过 git show <sha> 来查看那些提交记录,我错过了什么吗?是否有可能完全从历史记录中删除提交记录?

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

3个回答

4

未引用或孤立的提交将不会被推送到远程仓库。这些提交将在某个时候被git的垃圾回收机制移除。如果想要强制进行垃圾回收,请执行此操作。

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

0

请查看gitscm,它有关于如何完全删除资源的好资源。然而,我认为你关于推送到新起点的问题可以得到一个更简单的解决方案。

在你要推送的分支中没有提交引用的对象不会被发送到服务器。我建议将repo克隆到一个干净的目录中,从现有的repo拉取,然后推送到任何你想要的目标。这将给你一个只有引用对象的干净的.git目录。


0

你想要真正地从历史记录中“删除”吗?虽然你可以这样做,但如果有人已经拉取了这些更改,他们的历史记录将会出现问题。

因此,你可能想要做的是

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

在进行此操作之前,请备份! 如果有人已经拉取了您的更改,请准备听取恐怖故事。


嘿,Guillermo,是的,我想修改存储库历史记录,我知道我要做的事情的影响。谢谢你的回答! - gonz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接