GitHub小技巧-单独删除某个文件所有历史记录

· 622字 · 2分钟 · 阅读量

(一)git filter-branch命令 🔗

在日常开发中,有时候不经意地将包含敏感信息如密钥、公网IP等的文件传送到GitHub上,这是非常危险的行为。一旦发现此类问题,可能已经提交了多次代码,这时候就需要删除某个文件或文件夹的所有历史提交记录,以防止信息泄露。这时候可以使用git filter-branch命令进行操作。git filter-branch参考文档地址

要在Git中删除某个文件或文件夹的所有历史记录,可以使用以下git命令进行操作::

#删除单个文件使用这条
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 -rf --cached --ignore-unmatch 需要删除的文件夹路径' --prune-empty --tag-name-filter cat -- --all

#将本地的所有branch和tags推送到GitHub
git push origin --force --all
git push origin --force --tags

#强制解除对本地存储库中的所有对象的引用和垃圾收集
git for-each-ref --format='delete %(refname)' refs/original | git update-ref --stdin
git reflog expire --expire=now --all
git gc --prune=now

(一)实战操作 🔗

  1. Git Bash进入到项目根目录中

    项目目录

  2. 执行命令删除项目中的tool/WeChat.go文件所有的历史提交记录

git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch tool/WeChat.go' --prune-empty --tag-name-filter cat -- --all

Img

删除成功

Img

  1. 将本地的所有branch和tags推送到GitHub,覆盖之前的记录。
#将本地的所有branch和tags推送到GitHub
git push origin --force --all
git push origin --force --tags

#强制解除对本地存储库中的所有对象的引用和垃圾收集
git for-each-ref --format='delete %(refname)' refs/original | git update-ref --stdin
git reflog expire --expire=now --all
git gc --prune=now

Img

自此删除文件的所有历史提交记录完成,打开github查看历史记录可见tool/WeChat.go文件已删除

Img

git