代码之家  ›  专栏  ›  技术社区  ›  Programmingjoe

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

  •  3
  • Programmingjoe  · 技术社区  · 8 年前

    我有一个django项目,我已经很长一段时间不公开了。在我的项目生命周期中 settings.py , base_settings.py secret_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 回复  |  直到 8 年前
        1
  •  3
  •   Programmingjoe    8 年前

    在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 过去不起作用。