我在Github上托管了一个git存储库。在提交了许多文件后,我意识到我需要创建.gitignore
并排除.exe
,.obj
个文件。
但是,它会自动从存储库中删除这些提交的文件吗?有没有办法强迫它?
答案 0 :(得分:290)
不能仅仅因为它已被添加到.gitignore
您必须git rm --cached
删除回购中不需要的文件。 (--cached因为你可能想要保留本地副本但是从repo中移除。)所以如果你想从你的repo中删除所有的exe,那么
git rm --cached /\*.exe
(注意,星号*是从shell中引用的 - 这让git,而不是shell,扩展了文件和子目录的路径名)
答案 1 :(得分:31)
但是,它会自动从存储库中删除这些提交的文件吗?
没有。即使使用现有.gitignore
,您也可以使用-f
(强制)标记来暂存“已忽略”的文件。如果他们的文件已经提交,则不会自动删除。
git rm --cached path/to/ignored.exe
答案 2 :(得分:13)
如果您尚未推送更改:
git rm -r --cached .
git add .
git commit -m 'clear git cache'
git push
答案 3 :(得分:10)
我必须删除.idea和目标文件夹,在阅读完所有评论后,这对我有用:
git rm -r .idea
git rm -r target
git commit -m 'removed .idea folder'
然后推送到主人
答案 4 :(得分:5)
但是,它会自动从存储库中删除这些提交的文件吗?
没有。
执行此操作的“最佳”方法是使用git filter-branch
,如下所示:
git-filter-branch的手册页包含全面的示例。
注意您将重写历史记录。如果您发布了包含意外添加文件的任何修订,则可能会给这些公共分支的用户带来麻烦。告知他们,或者想想你需要删除文件有多糟糕。
注意如果存在标记,请始终使用--tag-name-filter cat
选项git filter-branch
。当你意识到你需要它时,它永远不会伤害并且会让你感到头疼。
答案 5 :(得分:1)
即使删除了文件然后提交,您仍然会在历史记录中包含这些文件。要删除这些内容,请考虑使用BFG Repo-Cleaner。它是git-filter-branch的替代品。