git - 删除“旧”项目的断开连接的 Git 历史记录
问题描述
我通过复制现有代码创建了一个新项目。通常,我会克隆一个新的空存储库,从现有的类似项目中复制文件(没有 .git 文件夹)并删除任何相关文件。初始提交将是所有没有内容的工具/设置内容。
我以某种方式搞砸了 - 我们的 CI 刚刚尝试发布 1.0.0 版本并失败了,因为该标签已经存在于 git 中。它存在于我复制的项目的历史中,在实际项目提交之前不知何故,脱节地闲逛:
新项目的初始提交是一个完整的提交 - 即它不是现有提交的“顶部”。它不是删除文件,只是添加新版本。所以新旧历史完全脱节。
不知道我是怎么做到的!
删除旧历史及其标签的最佳方法是什么?我应该手动删除标签吗?
解决方案
如果没有分支引用旧提交并且没有标记附加到旧提交并且您的新初始提交不是旧代码的“子”提交(因此它没有父提交)所有旧提交都是孤立的。
在屏幕截图中可以看到,旧提交仍然附加了一些标签。
删除这些标签 ( git tag -d TAGNAME && git push --delete origin TAGNAME
) 后,您可以使用git gc --prune=now --aggressive
. 您可能还必须在遥控器上进行垃圾收集。Github 根据this answer自动定期运行gc。如果记忆对我有用,gitlab 在项目设置中提供了一个选项。对于其他服务提供商,请参阅其手册以了解如何执行 git GC。
推荐阅读
- python - Python:嵌套字典一次更改所有值
- java - KafkaConsumer.commitSync() 实际上提交了什么?
- excel - 如何通过更改功能区选项卡触发宏?
- typescript - 使用 typescript 本地测试 firebase 函数
- c++ - 矩阵乘法在 C++ 犰狳中不起作用
- r - 在 R 中查找日期列。日期列具有不同的日期格式。将所有日期格式替换为 dd-mmm-yyyy
- json - HAProxy 1.5 - 在 504 错误上提供静态 json 文件
- tensorflow - 如何直接从 tf.data.Dataset.from_generator 方法生成编码文本?
- linux - 通过在 Windows 上运行的 Linux Docker 容器使用蓝牙
- reactjs - Api奇迹响应不显示反应