gitignore提交后

我有一个在Github上托pipe的git仓库。 提交了很多文件后,我意识到我需要创build.gitignore并排除.exe.obj文件。

但是,它会自动从存储库中删除这些提交的文件吗? 有什么办法强制吗?

不,你不能强制删除已经在repo中提交的文件,因为它被添加到.gitignore

你必须通过git rm --cached来删除你不想在回购的文件。 ( – caching,因为你可能想保留本地副本,但从回购中删除。)所以,如果你想删除所有的exe从你的回购做

 git rm --cached /\*.exe 

(请注意,星号*是从shell引用的 – 这让git,而不是shell,展开文件和子目录的path名)

但是,它会自动从存储库中删除这些提交的文件吗?

不,即使是现有的.gitignore ,也可以使用-f (强制)标志来.gitignore “忽略”文件。 如果他们的文件已经被提交,他们不会被自动删除。

 git rm --cached path/to/ignored.exe 

但是,它会自动从存储库中删除这些提交的文件吗?

没有。

做到这一点的“最好”的方法是使用git filter-branch作为写在这里的:

git-filter-branch的手册页包含了全面的例子。

注意你将重写历史。 如果您发布了包含意外添加文件的任何修订,这可能会给这些公共分支的用户造成麻烦。 通知他们,或者想想你需要删除文件有多糟糕。

注意在存在标签的情况下,请始终使用--tag-name-filter cat选项来git filter-branch 。 它永远不会伤害,当你意识到以后需要它的时候,将会使你头痛

我不得不删除.idea和目标文件夹,并阅读所有评论后,这为我工作:

 git rm -r .idea git rm -r target git commit -m 'removed .idea folder' 

然后推到掌握

即使删除文件然后提交,您仍然会在历史logging中包含这些文件。 要删除这些,请考虑使用BFG Repo-Cleaner 。 这是git-filter-branch的替代scheme。

如果您尚未推送更改:

 git rm -r --cached . git add . git commit -m 'clear git cache' git push