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