我想从存储库中删除文件。

git rm file_to_remove.txt

将从存储库中删除文件,但也将从本地文件系统中删除文件。如何从回购中删除此文件而不删除文件的本地副本?


当前回答

如果您只想取消跟踪文件而不从本地和远程存储库中删除,请使用以下命令:

git update-index --assume-unchanged  file_name_with_path

其他回答

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

更通用的解决方案:

编辑.gitignore文件。echo mylogfile.log>>.git忽略从索引中删除所有项。git rm-r-f--缓存。重建索引。git添加。进行新提交gitcommit-m“已删除mylogfile.log”

上面的答案对我不起作用。我使用过滤器分支删除所有提交的文件。

使用以下命令从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

由于rm--cache将删除远程存储库中的文件,因此可以改用更新索引参见:https://learn.microsoft.com/en-us/azure/devops/repos/git/ignore-files?view=azure-devops&tabs=visual-studio-2019

要从基于.gitignore的存储库中删除文件,而不从本地文件系统中删除文件:

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

对于Windows Powershell:

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