从Git存储库中删除文件,而不从本地文件系统中删除

我最初的提交包含一些日志文件。 我已经添加了*log到我的.gitignore ,现在我想从我的存储库中删除日志文件。

 git rm mylogfile.log 

将从存储库中删除一个文件,但也将从本地文件系统中删除它。

我怎样才能删除这个文件从回购没有删除我的本地副本的文件?

 git rm --cached mylogfile.log 

对于一个目录:

 git rm --cached -r mydirectory 

要从回购库中删除整个文件夹(如Resharper文件),请执行以下操作:

 git rm -r --cached folderName 

我已经提交了一些resharper文件,并不希望这些坚持其他项目用户。

您也可以从.gitignore中删除存储库中的文件,而不从本地文件系统中删除它们:

 git rm --cached `git ls-files -i -X .gitignore` 

另外,如果您提交了敏感数据(例如包含密码的文件),则应该从存储库的历史logging中完全删除它。 这里有一个解释如何做到这一点的指导: http : //help.github.com/remove-sensitive-data/

更通用的解决scheme:

  1. 编辑.gitignore文件。

    ECHO mylogfile.log >> .gitignore

  2. 删除索引中的所有项目。

    git rm -r -f --cached .

  3. 重build索引。

    git add .

  4. 做新的提交

    git commit -m "Removed mylogfile.log"

根据我的答案在这里: https : //stackoverflow.com/questions/6313126/how-to-remove-a-directory-in-my-github-repository

要删除文件夹/目录或文件只从Git仓库,而不是从本地尝试3个简单的步骤。


删除目录的步骤

 git rm -r --cached File-or-FolderName git commit -m "Removed folder from repository" git push origin master 

在接下来的提交中忽略该文件夹的步骤

要忽略来自下一次提交的文件夹,请创build一个名为.gitignore的文件,并将该文件夹的名称放入其中。 你可以放多less你想要的

.gitignore文件将如下所示

 /FolderName 

删除目录

Git让你忽略这些文件,假设它们没有改变。 这是通过运行git update-index --assume-unchanged path/to/file.txt命令来完成的。 一旦标记文件,git将完全忽略对该文件的任何更改; 它们在运行git status或git diff时不会显示出来,也不会被提交。

(从https://help.github.com/articles/ignoring-files

因此,不要删除它,而是永远忽略它的变化。 我认为这只能在本地工作,所以同事们仍然可以看到它的变化,除非他们执行上述相同的命令。 (尽pipe如此,仍然需要validation。)

注意:这不是直接回答问题,而是基于其他答案的评论中的后续问题。

以上的答案不适合我。 我用过滤分支去除所有提交的文件

从git仓库中删除一个文件:

 git filter-branch --tree-filter 'rm file' 

从git仓库中删除一个文件夹:

 git filter-branch --tree-filter 'rm -rf directory' 

这将从所有提交中删除目录或文件

您可以使用以下命令指定提交:

 git filter-branch --tree-filter 'rm -rf directory' HEAD 

或者一个范围

 git filter-branch --tree-filter 'rm -rf vendor/gems' t49dse..HEAD 

要将所有内容推送到远程,您可以执行:

 git push origin master --force