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

git rm file_to_remove.txt

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


当前回答

由于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)

忽略文件,从git中删除文件,更新git(用于删除)。

注意:这不涉及敏感信息的历史记录。

这个过程肯定需要对git的情况有所了解。随着时间的推移,我学会了这样做,比如:

1) 忽略文件

添加或更新project.gitignore以忽略它们-在许多情况下,例如您的,父目录(例如log/)将是要使用的正则表达式。提交并推送。gitignore文件更改(不确定是否需要推送,请注意,如果这样做不会造成伤害)。

2) 从git中删除文件(仅限)。

现在使用gitrm--cached some_dir从git(仅)中删除文件/检查它们是否仍保持在本地(它们应该!)。

3) 添加并提交更改(本质上,这是对“添加”删除内容的更改,尽管“添加”命令在其他方面令人困惑!)

git添加。gitcommit-m“删除”

这取决于您从git中删除的意思。:)

您可以使用git-rm-cached来取消文件的分页。有关详细信息,请参阅。当您取消标记某个文件时,这意味着它不再被跟踪,但这不会从以前的提交中删除该文件。

如果您想做的不仅仅是取消对文件的分页,例如从以前的所有提交中删除敏感数据,那么您需要使用BFG Repo Cleaner等工具来过滤分支。

更通用的解决方案:

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

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