(一)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
(一)实战操作 🔗
-
Git Bash
进入到项目根目录中 -
执行命令删除项目中的
tool/WeChat.go
文件所有的历史提交记录
git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch tool/WeChat.go' --prune-empty --tag-name-filter cat -- --all
删除成功
- 将本地的所有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
自此删除文件的所有历史提交记录完成,打开github查看历史记录可见tool/WeChat.go
文件已删除