gpt4 book ai didi

git - 如何从 git 上的 filter-branch 命令中删除重复的提交?

转载 作者:太空狗 更新时间:2023-10-29 14:03:53 24 4
gpt4 key购买 nike

我有一个长期保密的 Django 项目。在项目的整个生命周期中,我拥有包含敏感信息的 settings.pybase_settings.pysecret_settings.py 文件。现在我决定将代码开源,因为我不再积极参与该项目。

我运行了以下命令来删除这些文件的历史记录,以确保所有敏感信息都已消失。

git filter-branch -f --tree-filter 'rm -f exchange/secret_settings.py' HEAD
git filter-branch -f --tree-filter 'rm -f exchange/base_settings.py' HEAD
git filter-branch -f --tree-filter 'rm -f exchange/settings.py' HEAD

但是,github 警告我仍然有包含 .py~ 文件的提交,其中包含 AWS 信息,所以我运行了:

git filter-branch -f --tree-filter 'rm -f exchange/settings.py~' HEAD

我已保护我的 AWS 账户并从 AWS 中删除了所有 key ,因此我的账户是安全的。但是,现在我的整个提交历史记录都有重复提交,有时有 3 或 4 次。

我找到了各种答案,说我可以恢复到某些 .git/refs 备份,但这似乎不起作用。

这是项目:https://github.com/ProgrammingJoe/Texchange

有人知道我能做些什么来解决这个问题吗?

最佳答案

在 jhill 发表评论后,我最终进行了更多谷歌搜索,并在新分支上运行了以下命令:

git filter-branch -f --tree-filter 'rm -f exchange/settings.py' HEAD       
git filter-branch -f --tree-filter 'rm -f exchange/settings.py~' HEAD
git filter-branch -f --tree-filter 'rm -f exchange/base_settings.py' HEAD
git filter-branch -f --tree-filter 'rm -f exchange/base_settings.py~' HEAD
git filter-branch -f --tree-filter 'rm -f exchange/secret_settings.py' HEAD
git filter-branch -f --tree-filter 'rm -f exchange/secret_settings.py~' HEAD

在那之后,我的新分支通过大约 300 次提交回到了我想要的位置。然后我不得不弄清楚如何用另一个分支完全覆盖 master 。在良好的实践中,我将我的存储库克隆到另一个位置作为备份。然后我尝试了所有强制推送和 merge 的组合,我可以覆盖 master 分支,但没有任何效果。然后我问了这个问题:Github, my branch is behind master but it is correct. How do I overwrite master with the branch?

然后我意识到我在 master 中的一些旧提交是我想要的,所以我运行了:

git checkout master
git reset --hard correct_commit_id
git push -f origin master

这解决了我所有的问题,但我不小心删除了我曾经拥有的一个文件。还好我有备份 :)。我不确定为什么 git reset --hard fixed_branch 过去不起作用。

关于git - 如何从 git 上的 filter-branch 命令中删除重复的提交?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47403472/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com