我刚才注意到我的 .gitconfig 文件在我的仓库中是公开的。它包含我的秘密令牌。
我git-add -u
该文件并已提交。我不确定此命令是否也从先前的提交中删除了该文件。
我想确定并在之前的提交中搜索该文件,以便我的历史记录中没有这样的文件。
如何在之前的提交中搜索文件?
我跑
git filter-branch --tree-filter 'rm .gitconfig' master # Thanks to Greg!
我得到了
Rewrite 84dabfa2ea195ce9aad0309216858b302150017c (1/25)rm: .gitconfig: No such file or directory
tree filter failed: rm .gitconfig
错误消息表明我在提交历史记录中没有该文件。
有没有办法在我的提交历史记录中搜索文件,这样我就不需要运行删除工具来查看我的提交历史记录中没有该文件了?
答案 0 :(得分:4)
要从过去所有Git历史记录中删除文件,您需要使用git filter-branch
之类的内容重写所有过去的提交。但是,这样做会使您的新树与所有过去的树无法合并,因此请小心谨慎。
答案 1 :(得分:4)
简答:
git filter-branch --tree-filter 'rm -f .gitconfig' master
请注意-f
。
答案很长:
当文件不存在时, rm
将返回非零返回码。 filter-branch
认为这是一个错误并停止重写。添加-f
可以避免这种情况。
注意:强>
还有一个替代命令:
git filter-branch --index-filter 'git rm --cached --ignore-unmatch .gitconfig' master
更快。该命令记录在手册页的“示例”部分中。
答案 2 :(得分:1)
将存储库中的所有ewvisions重置为全局默认值(.gitconfig)。
git filter-branch -f --commit-filter 'GIT_COMMITTER_NAME="`git config --get user.name`";GIT_AUTHOR_NAME="`git config --get user.name`";GIT_COMMITTER_EMAIL="git config --get user.email";GIT_AUTHOR_EMAIL="`git config --get user.email`";git commit-tree "$@";' HEAD