删除的文件从一个混帐的储存库,而不删除它从当地文件系统
-
16-09-2019 - |
题
我最初承诺中所包含的一些记录文件。我加入 *log
我 .gitignore
, 现在我想要删除的日志文件从我的存储库。
git rm mylogfile.log
将去除文件的储存库,而且还会将其从当地文件系统。
我怎么可以删除这个文件从仓库 没有 删除我的地方复制的文件?
解决方案
从人文件:
当
--cached
给出,分级内容具有相匹配的分支的任一末端或磁盘上的文件,从而允许从刚刚索引中删除该文件。
因此,对于单个文件:
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`
或者,可替代地,在Windows Powershell的:
git rm --cached $(git ls-files -i -X .gitignore)
按这里我的回答: https://stackoverflow.com/questions/6313126/how-to-remove-a-directory -in-MY-github上的仓库
要删除的文件夹/目录或从git仓库从本地尝试只有文件,而不是3个简单的步骤。
<强>步骤以删除目录强>
git rm -r --cached File-or-FolderName
git commit -m "Removed folder from repository"
git push origin master
<强>步骤来忽略下一个提交该文件夹强>
要忽略来自下一个提交该文件夹使在根一个文件名为的的.gitignore 强> 并把该文件夹的名字进去。你可以把你想要尽可能多的
<强>的.gitignore 文件将看起来像这样
/FolderName
此外,如果已经COMMITED敏感数据(例如包含密码的文件),则应该完全从库的历史中删除。这里有一个指南,说明如何做到这一点: http://help.github.com/remove-sensitive-data/
一个更通用的解决方案:
编辑
.gitignore
文件。ECHO mylogfile.log >> .gitignore
删除所有的项目索引。
git rm -r -f --cached .
重建指数。
git add .
做出新的承诺
git commit -m "Removed mylogfile.log"
混帐使您可以通过假定它们是不变的忽略这些文件。这个 通过运行
git update-index --assume-unchanged path/to/file.txt
命令来完成。一旦将文件标记为这样,Git会 完全忽略对文件进行任何更改;他们不会显示出来的时候 运行git状态或git的差异,也不会永远被提交。
(来自 https://help.github.com/articles/ignoring-files )
因此,不删除它,但永远忽略更改。 我想,这只能在本地,所以同事们仍然可以看到更改,除非它们运行相同的命令如上。 (仍需验证此虽然。)
请注意:这是没有直接回答这个问题,而是基于跟进其他答案的评论问题
如果您只想untrack一个文件,而不是从本地和远程回购删除,然后使用这个命令:
git update-index --assume-unchanged file_name_with_path
以上答案不是为我工作。我用 filter-branch
删除所有提交的文件。
删除的文件从一个混帐库:
git filter-branch --tree-filter 'rm file'
删除一个文件夹,从个混库:
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