我想从存储库中删除文件。
git rm file_to_remove.txt
将从存储库中删除文件,但也将从本地文件系统中删除文件。如何从回购中删除此文件而不删除文件的本地副本?
我想从存储库中删除文件。
git rm file_to_remove.txt
将从存储库中删除文件,但也将从本地文件系统中删除文件。如何从回购中删除此文件而不删除文件的本地副本?
git rm文档说明:
当给定--cached时,暂存内容必须与分支的尖端或磁盘上的文件相匹配,从而允许仅从索引中删除文件。
因此,对于单个文件:
git rm --cached file_to_remove.txt
对于单个目录:
git rm --cached -r directory_to_remove
此外,如果您提交了敏感数据(例如包含密码的文件),则应将其从存储库的历史记录中完全删除。这里有一个指导说明如何做到这一点:http://help.github.com/remove-sensitive-data/
要从repo中删除整个文件夹(如Resharper文件),请执行以下操作:
git rm -r --cached folderName
我提交了一些重新格式化的文件,不希望这些文件为其他项目用户保留。
更通用的解决方案:
编辑.gitignore文件。echo mylogfile.log>>.git忽略从索引中删除所有项。git rm-r-f--缓存。重建索引。git添加。进行新提交gitcommit-m“已删除mylogfile.log”
Git允许您忽略这些文件,假设它们不变。这是通过运行git更新索引来完成的--假设不变path/to/file.txt命令。一旦将文件标记为这样,git将完全忽略该文件上的任何更改;他们不会出现在运行gitstatus或gitdiff,也不会提交它们。
(发件人https://help.github.com/articles/ignoring-files)
因此,不要删除它,而是永远忽略对它的更改。我认为这只在本地有效,所以同事们仍然可以看到对它的更改,除非他们运行与上面相同的命令。(但仍需要验证这一点。)
注意:这不是直接回答问题,而是基于其他答案评论中的后续问题。
要从基于.gitignore的存储库中删除文件,而不从本地文件系统中删除文件:
git rm --cached `git ls-files -i -c -X .gitignore`
对于Windows Powershell:
git rm --cached $(git ls-files -i -c -X .gitignore)
根据我的回答:https://stackoverflow.com/questions/6313126/how-to-remove-a-directory-in-my-github-repository
要仅从git存储库而不是本地删除文件夹/目录或文件,请尝试3个简单步骤。
删除目录的步骤
git rm -r --cached File-or-FolderName
git commit -m "Removed folder from repository"
git push origin master
在下次提交时忽略该文件夹的步骤
要在下次提交时忽略该文件夹,请在根目录中创建一个名为.gitignore的文件并将文件夹名称放入其中。您可以放入任意数量的文件夹
.gitignore文件将如下所示
/FolderName
上面的答案对我不起作用。我使用过滤器分支删除所有提交的文件。
使用以下命令从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 update-index --assume-unchanged file_name_with_path
忽略文件,从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等工具来过滤分支。
由于rm--cache将删除远程存储库中的文件,因此可以改用更新索引参见:https://learn.microsoft.com/en-us/azure/devops/repos/git/ignore-files?view=azure-devops&tabs=visual-studio-2019