所以我有这个项目,起初我做了一个
git add .
所以我可以开始工作,不要为哪些文件受版本控制或什么而烦恼。
当然,这很痛苦,因为在每次提交之间我通常只更改3-5个文件,所有构建文件(.class,.html,.xml等)都完全重新生成,这意味着执行< / p>
git add .
将添加数百个文件,而不是我真正更改的3-5个文件。
我知道我可以将所有不需要的文件添加到.gitignore
文件中。我想做的是,如果有办法追溯这样做。我想摆脱所有本来不应该提交的文件。
是否可以在git中执行此操作?如果是,怎么样?
答案 0 :(得分:7)
是的,您可以使用git filter-branch
。
Pro Git Book has a nice section on removing objects from history
--index-filter <command>
这是重写索引的过滤器。它类似于树过滤器,但不检查树,这使得它更快。经常与
git rm --cached --ignore-unmatch …
一起使用,请参阅下面的示例。对于毛病例,请参阅git-update-index(1)。
以此为例:
git filter-branch \
--index-filter 'git rm --cached --ignore-unmatch filename' \
--tag-name-filter cat \
-- --all
tag-name-filter
也可以重写您的代码,因此您不会丢失它们。
小心重写公共历史。您可能会让其他人不可能/难以保持最新或贡献。
答案 1 :(得分:2)
http://help.github.com/removing-sensitive-data/
不删除敏感数据,但这似乎是您正在寻找的。 p>
git filter-branch --index-filter 'git rm --cached --ignore-unmatch *.<filetype>' HEAD
答案 2 :(得分:0)
据我所知,git不会追溯性地执行此操作。您需要git rm
或git rm --cached
他们。