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

时间:2017-11-21 00:43:04

标签: git github git-filter-branch

我有一个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中删除了所有密钥,因此我的帐户是安全的。但是,现在我的整个提交历史记录中都有重复的提交,有时是3或4。

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

以下是项目:https://github.com/ProgrammingJoe/Texchange

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

1 个答案:

答案 0 :(得分:2)

我最后在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。在良好的实践中,我将我的仓库克隆在另一个位置作为备份。然后我尝试了推力和合并的每一个组合,我可以覆盖主分支,没有任何效果。然后我问了这个问题: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过去没有用。