.gitignore后提交

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

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

149544 次浏览

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

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

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

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

你必须git rm --cached来删除你不想在repo中的文件。(—缓存,因为您可能希望保留本地副本,但从回购删除。)所以如果你想删除所有的exe从你的回购做

git rm --cached /\*.exe

(注意,星号*是从shell中引用的-这让git而不是shell扩展文件和子目录的路径名)

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

不。

做到这一点的“最佳”配方是使用git filter-branch,如下所示:

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

你将改写历史。如果您发布了包含意外添加的文件的任何修订,这可能会给那些公共分支的用户带来麻烦。通知他们,或者考虑一下你有多需要删除这些文件。

请注意当存在标记时,总是使用--tag-name-filter cat选项来git filter-branch。当你意识到你需要它的时候,它不会伤害你,也会让你免去头痛

即使在您删除文件并提交之后,这些文件仍将保存在历史记录中。要删除这些,可以考虑使用高炉煤气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