首页 文章

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

提问于
浏览
2572

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

git rm mylogfile.log

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

如何从repo中删除此文件 without 删除我的本地文件副本?

9 回答

  • 20

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

    git rm -r --cached folderName
    

    我已经提交了一些resharper文件,并且不希望这些文件持续存在于其他项目用户 .

  • 66

    对于单个文件:

    git rm --cached mylogfile.log
    

    对于单个目录:

    git rm --cached -r mydirectory
    
  • 176

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

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

    或者,在Windows Powershell上:

    git rm --cached $(git ls-files -i -X .gitignore)
    
  • 56

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

    仅从git存储库中删除文件夹/目录或文件,而不是从本地尝试3个简单步骤 .


    Steps to remove directory

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

    Steps to ignore that folder in next commits

    要在下次提交时忽略该文件夹,请在根目录中创建一个名为.gitignore的文件,并将该文件夹名称放入其中 . 您可以根据需要添加任意数量

    .gitignore 文件将如下所示

    /FolderName
    

    remove directory

  • 255

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

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

    因此,不要删除它,而是永远忽略对它的更改 . 我认为这只适用于本地,所以除非他们运行与上面相同的命令,否则同事仍然可以看到它的变化 . (但仍需要验证这一点 . )

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

  • 64

    更通用的解决方案:

    • 编辑 .gitignore 文件 .

    ECHO mylogfile.log >> .gitignore

    • 从索引中删除所有项目 .

    git rm -r -f --cached .

    • 重建索引 .

    git add .

    • 进行新提交

    git commit -m "Removed mylogfile.log"

  • 5

    以上答案对我不起作用 . 我使用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
    
  • 5

    If you want to just untrack a file and not delete from local and remote repo then use thhis command:

    git update-index --assume-unchanged  file_name_with_path
    
  • 3683

    此外,如果您提交了敏感数据(例如包含密码的文件),则应将其从存储库的历史记录中完全删除 . 以下是解释如何执行此操作的指南:http://help.github.com/remove-sensitive-data/

相关问题