首页 > 解决方案 > 删除“旧”项目的断开连接的 Git 历史记录

问题描述

我通过复制现有代码创建了一个新项目。通常,我会克隆一个新的空存储库,从现有的类似项目中复制文件(没有 .git 文件夹)并删除任何相关文件。初始提交将是所有没有内容的工具/设置内容。

我以某种方式搞砸了 - 我们的 CI 刚刚尝试发布 1.0.0 版本并失败了,因为该标签已经存在于 git 中。它存在于我复制的项目的历史中,在实际项目提交之前不知何故,脱节地闲逛:

在此处输入图像描述

新项目的初始提交是一个完整的提交 - 即它不是现有提交的“顶部”。它不是删除文件,只是添加新版本。所以新旧历史完全脱节。

不知道我是怎么做到的!

删除旧历史及其标签的最佳方法是什么?我应该手动删除标签吗?

标签: git

解决方案


如果没有分支引用旧提交并且没有标记附加到旧提交并且您的新初始提交不是旧代码的“子”提交(因此它没有父提交)所有旧提交都是孤立的。

在屏幕截图中可以看到,旧提交仍然附加了一些标签。

删除这些标签 ( git tag -d TAGNAME && git push --delete origin TAGNAME) 后,您可以使用git gc --prune=now --aggressive. 您可能还必须在遥控器上进行垃圾收集。Github 根据this answer自动定期运行gc。如果记忆对我有用,gitlab 在项目设置中提供了一个选项。对于其他服务提供商,请参阅其手册以了解如何执行 git GC。


推荐阅读