从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:
-
编辑
.gitignore
文件。ECHO mylogfile.log >> .gitignore
-
删除索引中的所有项目。
git rm -r -f --cached .
-
重build索引。
git add .
-
做新的提交
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