如何完全删除或销毁 Git 仓库中的提交记录?

15

表面上看,这似乎与数百万个有关修改git仓库中历史记录的类似问题相同,但我认为我的情况有些不同,并且我没有找到适合我的解决方案。

我有一个git存储库,在某个时间点上,其中一名程序员无意中,以某种方式,引入了来自不同存储库的代码,而且该(先前不相关的)存储库的整个历史记录现在已成为我的存储库提交日志的一部分。

查看提交,很清楚地知道“引入”这个历史记录的确切提交。

在该提交之后,我们没有接触过任何这些文件。

我想要完全从我的存储库中删除所有这些不相关的提交。 如果必须逐个提交进行操作,我也没有关系,但是我希望我的存储库真正只反映我们自己的代码。

如果有帮助的话,结构就像这样:

  • 1234号提交之后的提交(更新的),不会触及在1234号提交中引入的错误文件中的任何一个

  • 1234号提交 - 包含几个与我们代码库相关的文件,还合并了不相关存储库的整个历史记录

  • 1234号提交之前的提交(时间上更早)现在是我们自己的提交和不相关存储库的提交的混合。


1
听起来你需要压缩提交... - Adam M-W
怎么可能从另一个仓库带来提交记录呢?! - Marcin Koziński
你能提供更多关于那个提交的细节吗?我在考虑使用 git cat-file 1234... - Michał Górny
1个回答

5

您需要进行交互式变基:

git rebase -i <hash-of-the-commit-1034>~

从列表中删除提交 1034。运行 git 垃圾回收器:

git gc

推送到上游:

git push -f

这将从您的仓库中清除提交1034。

这是否意味着它也会从不相关的仓库中删除与此提交相关的提交历史记录? - user658587
它将删除与该提交相关的所有内容。 - Sergey K.

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