将ignore文件追溯添加到git repo

dev*_*ium 5 git version-control

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

git add .
Run Code Online (Sandbox Code Playgroud)

所以我可以开始工作,而不是被哪些文件控制版本或什么文件所困扰.

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

git add .
Run Code Online (Sandbox Code Playgroud)

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

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

是不是可以用git做到这一点?如果有,怎么样?

seh*_*ehe 7

是的,你可以使用git filter-branch.

临Git的书有从历史记录中删除的对象一个不错的部分

--index-filter <command> 
Run Code Online (Sandbox Code Playgroud)

这是重写索引的过滤器.它类似于树过滤器,但不检查树,这使得它更快.经常使用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
Run Code Online (Sandbox Code Playgroud)

tag-name-filter有重写你的标签一样,所以你不会失去他们.

放弃

小心重写公共历史.您可能会让其他人不可能/难以保持最新或贡献.