git - Git历史重复,是否可以压缩提交?
问题描述
帮助:Git 历史重复 (O_O)
我试图获取包含 API 密钥的文件,因此研究了从 git 历史记录中删除文件并使用此处提供的命令:https ://youtu.be/Bo-8EfDpKxA
我使用了命令
git filter-branch --index-filter 'git rm --cached --ignore-unmatch .env.development' HEAD
git filter-branch --index-filter 'git rm --cached --ignore-unmatch .env.production' HEAD
效果很好,但我认为在将更改的历史记录拉入第二个本地存储库以测试更改时我搞砸了。我将不得不在第二个 repo 上重新定位,以确保旧的历史已经消失。但我想我已经拒绝了(快进合并或其他什么),所以现在我有大量重复的提交!(O_O) 它们是相同的代码更改和时间戳,但提交 ID 不同。
问题
有没有办法修复历史的重复?历史重写会压缩每个具有相同时间戳的提交,怎么样?
或者我会手动删除(几乎)每第二次提交的 rebase?
第二个问题
我在开发分支上进行了这些更改,并且文件的删除确实有效。然而,将开发合并到主人并没有成功(当然)。所以我想我也写过大师的历史吧?
但现在恐怕我会再次复制主分支历史中的提交......
解决方案
我试图获取包含 API 密钥的文件,因此研究了从 git 历史记录中删除文件并使用此处提供的命令
您应该做的是撤销 API 密钥并发布一个新密钥。如果 repo 位于多台计算机中、由不同的人使用、备份等,那么任何形式的风险都是有风险的。
有没有办法解决它?
我不确定你想要修复什么,确切地说。任何更改提交中的任何内容的内容都会更改哈希值。因此,如果您成功删除了要删除的内容,并且现在您有一个带有旧提交的分支和一个带有新提交的分支,您需要做的是删除指向旧提交链的分支并垃圾收集存储库以确保旧的真的消失了。
所以我想我也写过大师的历史吧?
分支只是指向提交的指针。如果您仍然有多个包含该文件的分支,则需要移动这些分支以指向固定的提交链。所以你必须做什么取决于。如果您的master
分支也有错误,独立地,那么您还必须重写master
.
推荐阅读
- php - 如何从 index.php 加载 DOM 树
- javafx - 将数组中的数据添加到 TableView javafx 的不同列
- python - SpaCy 权限被拒绝
- r - 如何在 R 中运行 LDA 主题模型时使用 8 个内核
- javascript - Angular 6 Material MatFormField 显示为未知组件
- python - Python 不会调用简单的测试函数。但它编译正常。这是怎么回事?
- d3.js - 具有取决于阈值的二进制着色的 D3 面积图
- c++ - std::cout 的奇怪行为
- opencv - 将多页 Tesseract 框文件转换为 OpenCV X、Y、宽度、高度
- python - 将 ImageField url 与 django 中的另一个对象相关联