我正在使用一个共享的 github 存储库来协作一个项目。因为我是个白痴,所以我提交并推送了一个包含我不想共享的密码的脚本文件(是的,我可以更改密码,但无论如何我想删除它!)。
有没有办法从github的历史记录中恢复提交,在本地删除密码,然后重新提交并推送更新的文件?我不想完全删除文件,也不想丢失 github 上的提交历史记录。
(这个问题 如何从 git 存储库中完全删除文件? 显示了如何删除敏感文件,但没有显示如何从文件中编辑敏感数据,所以这不是重复的)
我建议使用 new git filter-repo,它取代了 BFG 和git filter-branch.
注意:如果您在运行上述命令时收到以下错误消息:
Error: need a version of `git` whose `diff-tree` command has the `--combined-all-paths` option`
Run Code Online (Sandbox Code Playgroud)
这意味着你必须更新git。
第一:做一份本地仓库的副本(一个新的克隆)
参见“内容库过滤”:
最后,您可以(如果您是唯一在该存储库上工作的人)执行 git push --force
如果要修改文件内容,可以根据文件中的表达式列表进行修改,每行一个。
例如,一个名为的文件expressions.txt包含:Run Code Online (Sandbox Code Playgroud)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然后运行
Run Code Online (Sandbox Code Playgroud)git filter-repo --replace-text expressions.txt将通过并替换:
p455w0rd与***REMOVED***,foo与bar,- 任何包含
666空行的行,- 单词
driverwithpilot(但如果它之前或之后有字母则不然;例如驱动程序将保持不变),MM/DD/YYYY带有YYYY-MM-DD和的确切文本- 表格的日期字符串
MM/DD/YYYY与形式的那些YYYY-MM-DD。
使用BFG: https: //rtyley.github.io/bfg-repo-cleaner/
要删除文件:
$ bfg --delete-files <file to remove> my-repo.git
Run Code Online (Sandbox Code Playgroud)
您还可以使用此工具删除密码和蚂蚁敏感数据。
准备一个替换文件,其中包含您要替换的内容,然后使用 BFG 将其清除。
bfg --replace-text passwords.txt my-repo.git
Run Code Online (Sandbox Code Playgroud)
# Example of the passwords.txt file:
string1 # Replace string ***REMOVED***' (default text)
string2==>replacementText # replace with 'replacementText' instead
string3=> # replace with the empty string
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2397 次 |
| 最近记录: |