Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从git上的筛选器分支命令中删除重复提交?_Git_Github_Git Filter Branch - Fatal编程技术网

如何从git上的筛选器分支命令中删除重复提交?

如何从git上的筛选器分支命令中删除重复提交?,git,github,git-filter-branch,Git,Github,Git Filter Branch,我有一个django项目,我很长一段时间都是保密的。在项目的整个生命周期中,我拥有了settings.py、base\u settings.py、以及secret\u settings.py敏感信息文件。现在我已经决定将代码开源,因为我不再积极参与这个项目 我运行了下面的命令来删除这些文件的历史记录,以确保所有敏感信息都已删除 git filter-branch -f --tree-filter 'rm -f exchange/secret_settings.py' HEAD git filte

我有一个django项目,我很长一段时间都是保密的。在项目的整个生命周期中,我拥有了
settings.py
base\u settings.py
、以及
secret\u 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
git checkout master
git reset --hard correct_commit_id
git push -f origin master
我已经保护了我的AWS帐户,并从AWS中删除了所有密钥,因此我的帐户是安全的。但是,现在我已经为我的整个提交历史记录复制了提交,有时是3或4次

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

以下是项目:


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

在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。在良好的实践中,我在另一个位置克隆了我的回购协议作为备份。然后,我尝试了各种力量推动和合并的组合,以覆盖主分支,但没有任何效果。然后我问了这个问题:

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

git filter-branch -f --tree-filter 'rm -f exchange/settings.py~' HEAD
git checkout master
git reset --hard correct_commit_id
git push -f origin master

这修复了我所有的问题,但我不小心删除了一个我曾经拥有的文件。幸好我有备份:)。我不知道为什么
git reset--硬修复的\u分支过去不起作用。

过滤器分支--删除删除了500个提交但仍有重复的空的
@jthill。我可以再往回走一步吗?我多次运行了该命令