banner
lca

lca

真正的不自由,是在自己的心中设下牢笼。

github不小心上传了敏感文件操作该如何撤消?

在使用 GitHub 的过程中,假如某次提交代码时不小心将敏感信息提交进了公共仓库。

如果发现得及时,本地提交后还没有推送到 GitHub 远程仓库的话,这种情况还好处理,直接修改代码后通过git commit --amend即可。

但如果发现时已经推送到了 GitHub 远程仓库,或者已过了许久,后续有了很多新的 commits,这种情况就会比较复杂了。

1、第一步

git filter-branch --force --index-filter "git rm --cached --ignore-unmatch 你要删除的文件(相对项目的路径)" --prune-empty --tag-name-filter cat -- --all

如下:
git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch ./picgo/20220418121957.png' --prune-empty --tag-name-filter cat -- --all
  • --force:强制执行操作,即使会丢失一些提交。
  • --index-filter:通过对索引进行操作来修改历史记录,后面的 'git rm --cached --ignore-unmatch ./picgo/20220418121957.png' 表示要执行的具体命令,即移除指定路径对应的文件。
  • --prune-empty:在处理过程中,移除空的提交。
  • --tag-name-filter:对标签进行操作,cat 表示保持标签名称不变。
  • -- --all:表示将命令应用于所有分支和标签。

2、第二步

强制推送所有分支和标签

git push origin --force --all
git push origin --force --tags

3、第三步

git for-each-ref --format='delete %(refname)' refs/original | git update-ref --stdin #删除 refs/original 引用中的每一个引用
git reflog expire --expire=now --all #清理所有引用(分支、标签等)的reflog。reflog记录了引用的移动、重置等操作历史
git gc --prune=now #用于垃圾回收,即清理不再需要的对象
加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。