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

git rm file_to_remove.txt

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


当前回答

git rm文档说明:

当给定--cached时,暂存内容必须与分支的尖端或磁盘上的文件相匹配,从而允许仅从索引中删除文件。

因此,对于单个文件:

git rm --cached file_to_remove.txt

对于单个目录:

git rm --cached -r directory_to_remove

其他回答

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

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

Git允许您忽略这些文件,假设它们不变。这是通过运行git更新索引来完成的--假设不变path/to/file.txt命令。一旦将文件标记为这样,git将完全忽略该文件上的任何更改;他们不会出现在运行gitstatus或gitdiff,也不会提交它们。

(发件人https://help.github.com/articles/ignoring-files)

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

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

更通用的解决方案:

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

git rm文档说明:

当给定--cached时,暂存内容必须与分支的尖端或磁盘上的文件相匹配,从而允许仅从索引中删除文件。

因此,对于单个文件:

git rm --cached file_to_remove.txt

对于单个目录:

git rm --cached -r directory_to_remove

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

git update-index --assume-unchanged  file_name_with_path