将ignore文件追溯添加到git repo

时间:2011-04-19 14:27:24

标签: git version-control

所以我有这个项目,起初我做了一个

git add .

所以我可以开始工作,不要为哪些文件受版本控制或什么而烦恼。

当然,这很痛苦,因为在每次提交之间我通常只更改3-5个文件,所有构建文件(.class,.html,.xml等)都完全重新生成,这意味着执行< / p>

git add .

将添加数百个文件,而不是我真正更改的3-5个文件。

我知道我可以将所有不需要的文件添加到.gitignore文件中。我想做的是,如果有办法追溯这样做。我想摆脱所有本来不应该提交的文件。

是否可以在git中执行此操作?如果是,怎么样?

3 个答案:

答案 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/

不删除敏感数据,但这似乎是您正在寻找的。

git filter-branch --index-filter 'git rm --cached --ignore-unmatch *.<filetype>' HEAD

答案 2 :(得分:0)

据我所知,git不会追溯性地执行此操作。您需要git rmgit rm --cached他们。