提交后的gitignore

时间:2011-06-30 13:18:20

标签: git github gitignore

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

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

6 个答案:

答案 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的替代品。