2009-06-28 65 views
1

刚才我注意到我的.gitconfig -file在我的回购中是公开的。它包含我的秘密令牌。无法在旧的Git提交中找到.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

谢谢您的回答! – 2009-07-04 00:28:58

回答

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 

这是要快得多。该命令记录在手册页的“示例”部分。

4

要从以前的所有Git历史记录中删除文件,您需要使用诸如git filter-branch之类的东西来重写所有过去的提交。但是,这样做会让您的新树无法与所有过去的树木合并,因此请谨慎操作。

+0

我想在/ tmp中使用Git -files。 ---在将.git复制到/ tmp后,我与他们玩得不成功。 ---这表明我需要使用.git将所有文件复制到/ tmp。 --- @你如何制作第二个副本,以便测试命令? – 2009-06-28 02:12:57

+1

您可以使用“git clone”克隆存储库。你对克隆仓库所做的任何事情都不会影响原始仓库(当然,除非你推动你的改变)。 – 2009-06-28 06:50:37

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 "[email protected]";' HEAD