如何从github历史记录中的文件中删除敏感数据

如何从github历史记录中的文件中删除敏感数据,git,github,revert,Git,Github,Revert,我正在使用一个共享的github存储库来协作一个项目。因为我是个白痴,我提交并推送了一个脚本文件,其中包含一个我不想共享的密码(是的,我可以更改密码,但无论如何我都想删除它!) 有没有办法从github的历史记录中恢复提交,在本地删除密码,然后重新提交并推送更新的文件?我不想完全删除该文件,也不想丢失github上的提交历史记录 (这项质询 显示如何删除敏感文件,但不显示如何编辑文件中的敏感数据,因此这不是重复的)使用BFG: 要删除文件,请执行以下操作: $ bfg --delete-file

我正在使用一个共享的github存储库来协作一个项目。因为我是个白痴,我提交并推送了一个脚本文件,其中包含一个我不想共享的密码(是的,我可以更改密码,但无论如何我都想删除它!)

有没有办法从github的历史记录中恢复提交,在本地删除密码,然后重新提交并推送更新的文件?我不想完全删除该文件,也不想丢失github上的提交历史记录

(这项质询 显示如何删除敏感文件,但不显示如何编辑文件中的敏感数据,因此这不是重复的)

使用BFG:

要删除文件,请执行以下操作:

$ bfg --delete-files <file to remove>  my-repo.git


我建议使用新的,这是

注意:如果在运行上述命令时收到以下错误消息:

Error: need a version of `git` whose `diff-tree` command has the `--combined-all-paths` option`
这意味着你必须这么做


第一:复制一份本地回购协议(新克隆)

见“”:

最后,您可以(如果您是唯一一个在该存储库上工作的人)执行一个
git push--force

如果要修改文件内容,可以根据文件中的表达式列表进行修改,每行一个。
例如,一个名为
expressions.txt
的文件包含:

p455w0rd
foo==>bar
glob:*666*==>
regex:\bdriver\b==>pilot
literal:MM/DD/YYYY=>YYYY-MM-DD
regex:([0-9]{2})/([0-9]{2})/([0-9]{4})==>\3-\1-\2
然后跑

git filter-repo --replace-text expressions.txt
将通过并替换:

  • p455w0rd
    已删除***
  • foo
  • 包含带有空行的
    666
    的任何行
  • 单词
    driver
    pilot
    (但如果前面或后面有字母,则不包括在内;例如,drivers将不被修改)
  • 带有
    YYYY-MM-DD
    的确切文本
    MM/DD/YYYY
  • 格式为
    MM/DD/YYYY
    的日期字符串与格式为
    YYYY-MM-DD
    的日期字符串

这回答了你的问题吗?我不希望丢失github上的提交历史记录:要清楚,您仍然希望提交历史记录包含带有密码的文件的可查看修订版?不-对不起,我不干净-我希望提交历史记录的其余部分,但删除密码HMMM。。这将清理我的git回购,但如果我推到github,它不只是添加另一个(清理)提交并将密码保留在github历史记录中?使用BFG将从整个历史记录中删除密码,但您必须强制推送以覆盖当前内容已安装BFG但
BFG--replace text passwords.txt
给我一个语法错误
BFG--replace text passwords.txt^语法错误:无效语法
语法错误
看起来像Python错误。我怀疑您是在Python命令行中运行该命令的。在操作系统控制台,操作系统命令解释器中运行它。赛尔夫注意:这是我关于堆栈溢出的第23000个答案(在136个月内),是在测试结束5个月后。在此之前:。。。
p455w0rd
foo==>bar
glob:*666*==>
regex:\bdriver\b==>pilot
literal:MM/DD/YYYY=>YYYY-MM-DD
regex:([0-9]{2})/([0-9]{2})/([0-9]{4})==>\3-\1-\2
git filter-repo --replace-text expressions.txt