我的初始提交包含一些日志文件。我已经添加 *log
对我的 .gitignore
,现在我想从我的存储库中删除日志文件。
git rm mylogfile.log
将从存储库中删除文件,但也将从本地文件系统中删除它。
如何从repo中删除此文件 无 删除我的文件的本地副本?
我的初始提交包含一些日志文件。我已经添加 *log
对我的 .gitignore
,现在我想从我的存储库中删除日志文件。
git rm mylogfile.log
将从存储库中删除文件,但也将从本地文件系统中删除它。
如何从repo中删除此文件 无 删除我的文件的本地副本?
对于单个文件:
git rm --cached mylogfile.log
对于单个目录:
git rm --cached -r mydirectory
要从repo中删除整个文件夹(如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)
此外,如果您提交了敏感数据(例如包含密码的文件),则应将其从存储库的历史记录中完全删除。以下是解释如何执行此操作的指南: http://help.github.com/remove-sensitive-data/
根据我的答案: https://stackoverflow.com/questions/6313126/how-to-remove-a-directory-in-my-github-repository
删除目录的步骤
git rm -r --cached File-or-FolderName
git commit -m "Removed folder from repository"
git push origin master
在下次提交中忽略该文件夹的步骤
要从下一次提交中忽略该文件夹,请在root中命名一个文件 的.gitignore 并将该文件夹名称放入其中。您可以根据需要添加任意数量
的.gitignore 文件看起来像这样
/FolderName
更通用的解决方案:
编辑 .gitignore
文件。
ECHO mylogfile.log >> .gitignore
从索引中删除所有项目。
git rm -r -f --cached .
重建索引。
git add .
进行新的提交
git commit -m "Removed mylogfile.log"
Git允许您通过假设它们不变来忽略这些文件。这个 是通过运行来完成的
git update-index --assume-unchanged path/to/file.txt
命令。一旦标记文件,git就会 完全忽略该文件的任何更改;他们不会出现在什么时候 运行git status或git diff,它们也不会被提交。
(从 https://help.github.com/articles/ignoring-files)
因此,不要删除它,而是永远忽略对它的更改。 我认为这只适用于本地,所以除非他们运行与上面相同的命令,否则同事仍然可以看到它的变化。 (但仍需要验证这一点。)
注意:这不是直接回答问题,而是基于其他答案的评论中的后续问题。
以上答案对我不起作用。我使用filter-branch删除所有提交的文件
使用以下命令从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