我有一个git仓库托管在Github上。在提交了许多文件后,我意识到我需要创建.gitignore并排除.exe, .obj文件。
.gitignore
.exe
.obj
但是,它会自动从存储库中删除这些已提交的文件吗?有办法强制吗?
但是,它会自动从存储库中删除这些已提交的文件吗?
不。即使使用现有的.gitignore,也可以使用-f (force)标志来执行“被忽略”的文件。如果这些文件已经提交,它们不会被自动删除。
-f
git rm --cached path/to/ignored.exe
不,你不能仅仅因为一个已经在repo中提交的文件被添加到.gitignore就强制删除它
你必须git rm --cached来删除你不想在repo中的文件。(—缓存,因为您可能希望保留本地副本,但从回购删除。)所以如果你想删除所有的exe从你的回购做
git rm --cached
git rm --cached /\*.exe
(注意,星号*是从shell中引用的-这让git而不是shell扩展文件和子目录的路径名)
不。
做到这一点的“最佳”配方是使用git filter-branch,如下所示:
git filter-branch
git-filter-branch的手册页包含了全面的示例。
你将改写历史。如果您发布了包含意外添加的文件的任何修订,这可能会给那些公共分支的用户带来麻烦。通知他们,或者考虑一下你有多需要删除这些文件。
请注意当存在标记时,总是使用--tag-name-filter cat选项来git filter-branch。当你意识到你需要它的时候,它不会伤害你,也会让你免去头痛
--tag-name-filter cat
即使在您删除文件并提交之后,这些文件仍将保存在历史记录中。要删除这些,可以考虑使用高炉煤气Repo-Cleaner。它是git-filter-branch的替代方案。
我不得不删除。idea和目标文件夹,在阅读了所有的评论后,这对我来说是有效的:
git rm -r .idea git rm -r target git commit -m 'removed .idea folder'
然后推到主人
如果您还没有执行更改:
git rm -r --cached . git add . git commit -m 'clear git cache' git push