first-contributions 中的 Git 文件移除指南:用 git rm --cached 停止跟踪但保留本地文件
first-contributions 中的 Git 文件移除指南用 git rm --cached 停止跟踪但保留本地文件【免费下载链接】first-contributions✨ Help beginners to contribute to open source projects项目地址: https://gitcode.com/gh_mirrors/fi/first-contributions导读在参与开源项目例如通过 first-contributions 仓库完成你的第一次贡献的过程中你常常会遇到一种需求让 Git 停止跟踪某个文件但又不希望它从你的电脑上消失。本指南以 removing-a-file.pt_br.md 为核心结合仓库内配套的进阶文档系统讲解git rm --cached的用法、背后的工作原理以及与.gitignore配合的最佳实践。读完本文你将掌握只解除跟踪、不删除本地文件的完整操作流程并能将其应用到日常的版本管理与开源贡献场景中。为什么需要从 Git 移除文件而不删除本地文件在 Git 的默认行为中一个文件一旦被git add加入暂存区并git commit提交就会进入版本库的跟踪范围。此后对它的任何修改都会体现在git status中。但在实际开发中存在大量不该被跟踪却已经被跟踪的文件本地生成的环境变量配置如.env编译产物、日志、缓存文件个人专属的 IDE 配置或临时文件误提交的大文件或密钥文件。如果直接用git rm file删除文件会同时从磁盘上消失这往往不是我们想要的。first-contributions 仓库的进阶文档 creating-a-gitignore-file.md 明确指出对于已经提交过、之后才加入.gitignore的文件必须先把它从 Git 跟踪中移除。这正是git rm --cached的核心使用场景。核心命令git rm --cached在仓库根目录或文件所在目录执行以下命令即可将文件从 Git 的跟踪列表中移除同时保留它在本地文件系统中的实体git rm file --cached以 first-contributions 入门流程中的典型场景为例假设你误把file1.js提交到了仓库现在想停止跟踪它git rm file1.js --cached命令执行后Git 会输出类似rm file1.js的提示但请注意这里的rm只作用于 Git 的索引index/暂存区并不会真正删除你磁盘上的file1.js。原文档 removing-a-file.pt_br.md 的核心示例即为此命令英文原文可见 removing-a-file.md。提示git rm的完整语法是git rm [options] [--] file...--cached是其常用选项之一含义为仅从索引中移除不触碰工作区文件。命令执行后发生了什么执行git rm file --cached后Git 会发生两件事停止跟踪该文件从 Git 的索引暂存区中被移除。对 Git 来说这条改动等价于删除了这个文件——下一次提交时Git 会记录该文件从版本库中消失。保留本地文件工作区中的文件实体原封不动。如果你去文件系统中查找会发现文件仍然存在内容也未被修改。你可以用git status验证结果。此时 Git 会同时报告两类信息一个deleted状态针对已暂存的移除操作即git rm --cached产生的暂存改动一个untracked状态因为本地文件还在但已不在跟踪范围内所以被识别为未跟踪文件。这正是从 Git 的角度看像是删除了从文件系统的角度看文件还在的直观体现。关键区别不加 --cached 会怎样--cached标志是整个操作的分水岭。原文档特别强调如果省略--cachedGit 不仅会从仓库中移除文件还会从你的文件系统中删除它。两者对比如下命令索引暂存区工作区本地磁盘适用场景git rm file --cached移除跟踪保留文件停止跟踪但继续使用本地文件git rm file移除跟踪同时删除文件彻底删除包括本地副本因此凡是文件还要继续用、只是不想让 Git 管它的场景都必须带上--cached。一旦误用了不带标志的git rm本地文件会被直接删除只能依靠git checkout -- file或git restore file从最近一次提交中恢复。提交并推送到远程仓库git rm --cached只是把移除跟踪这一改动写入了暂存区要让它生效并同步到远程还需要完成提交与推送git commit -m Remove file1.js git push origin master其中git commit -m Remove file1.js将停止跟踪 file1.js固化为一次提交git push origin master把该提交推送到远程仓库。推送后远程仓库同样会移除该文件的跟踪。需要注意的是first-contributions 主流程文档 README.md 推荐的默认分支以及git push用法可能因项目而异。原文档removing-a-file.md同时指出应推送到你正在工作的分支。在 first-contributions 的入门教程中贡献者通常先git switch -c your-new-branch-name创建分支再git push -u origin your-branch-name推送你可以参照 README 中的对应步骤选择正确的分支名与远程名。附加功能一次移除多个文件同时移除多个文件如果你需要停止跟踪多个文件可以把它们全部写在同一条命令中git rm file1.js file2.js file3.js --cached这条命令会一次性把file1.js、file2.js、file3.js全部从 Git 跟踪中移除本地文件均保留。使用通配符批量移除你还可以使用通配符*批量移除所有相似文件。例如希望把本地仓库中所有.txt文件停止跟踪git rm *.txt --cached这条命令会匹配当前目录下所有.txt文件并解除其跟踪。结合前文提到的索引概念通配符由 Git 在索引中展开匹配因此只作用于已被跟踪的.txt文件不影响本地文件。需要留意的是通配符的匹配范围与 shell 和路径有关。若文件分散在不同子目录可能需要配合递归选项如git rm -r --cached或显式指定路径first-contributions 的.gitignore文档 creating-a-gitignore-file.md 中提供了一次性解除所有已忽略文件跟踪的批量方案git rm -r --cached . git add . git commit -m Updated .gitignore与 .gitignore 配合停止跟踪后防止再次被跟踪git rm --cached通常与.gitignore配合使用形成完整的停止跟踪闭环在.gitignore中写入想要忽略的文件模式如*.txt、.env、node_modules/对已经提交过的文件执行git rm --cached file解除既有跟踪提交并推送此后该文件既不在版本库中也不会再出现在git status里。first-contributions 的进阶文档 creating-a-gitignore-file.md 给出了.gitignore的基础语法*表示通配符、/表示相对于.gitignore的路径、#表示注释。例如# Ignore log and cache files *.log .cache/ # Ignore environment files .env # Ignore all text files *.txt需要强调的是.gitignore只对尚未被跟踪的文件生效对已经提交过的文件无效——这正是必须先执行git rm --cached的原因。两者的配合逻辑在仓库文档中构成了完整的进阶知识链可参见 additional-material.md 中的索引说明。撤销误操作如果执行git rm --cached后反悔了想恢复对文件的跟踪最简单的方式是重新把它加回暂存区git add file执行后文件会重新进入跟踪状态。不过请记住恢复跟踪并不会撤销移除跟踪的那次提交——如果你已经提交并推送了移除操作需要结合提交回滚如git revert来恢复远程状态相关流程可参考仓库中的 reverting-a-commit.md 与 undoing-a-commit.md。小结git rm --cached是 Git 中解除跟踪但不删除文件的标准工具也是将已提交文件纳入.gitignore管控前的必经步骤。回顾本文核心要点git rm file --cached停止跟踪保留本地文件省略--cached文件同时从磁盘删除配合git commit与git push让远程仓库同步移除跟踪支持多文件与通配符批量操作与.gitignore配合可彻底避免文件被再次跟踪。在 first-contributions 的贡献流程中无论你是初次提交Contributors.md的修改还是后续维护 fork 时整理文件跟踪状态掌握这一命令都能让你更从容地控制仓库的内容边界。仓库中的完整进阶材料索引见 additional-material.md其中还包含分支管理、合并冲突解决、提交压缩等更多实战主题值得继续深入阅读。【免费下载链接】first-contributions✨ Help beginners to contribute to open source projects项目地址: https://gitcode.com/gh_mirrors/fi/first-contributions创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考