Git 历史重复,是否可以压缩提交?

时间:2021-01-21 08:19:21

标签: git git-rebase git-history-rewrite

帮助: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?

第二个问题

我在开发分支上做了这些更改,文件的删除确实有效。然而,将开发合并到母版并没有成功(当然)。所以我想我也写过主人的历史吗?

但现在恐怕我会再次复制主分支历史记录中的提交...

1 个答案:

答案 0 :(得分:1)

<块引用>

我尝试使用包含 API 密钥的文件,因此研究了从 git 历史记录中删除文件并使用此处提供的命令

您应该做的是撤销 API 密钥并发布新的密钥。如果存储库位于多台计算机中,由不同的人使用、备份等,那么任何此类都存在风险。

<块引用>

有办法解决吗?

我不确定您要修复什么,确切地说。任何更改提交中的任何内容都会更改哈希。因此,如果你成功删除了你想要删除的东西,现在你有一个带有旧提交的分支和一个带有新提交的分支,你需要做的是删除指向旧提交链的分支并垃圾收集存储库以确保旧的真的消失了。

<块引用>

所以我想我也写过主人的历史吗?

分支只是指向提交的指针。如果您仍然有多个包含该文件的分支,则需要将这些分支移动到指向已修复的提交链。所以你必须做什么取决于。如果您的 master 分支也有错误,独立的,那么您也必须重写 master 的历史记录。