如何让Git忘记一个现在在.gitignore中的已跟踪文件
如果您曾经尝试将文件添加到您的 Git 存储库(例如,您不希望跟踪的配置文件),后来才意识到它们不应该被添加,那么您可能已经创建了您的.gitignore文件。但是,不知何故,您会发现 Git 仍然跟踪它们,即使它们打算添加到.gitignore中。这很烦人,但幸运的是,Git 有办法永远忘记这些已跟踪的文件。在本文中,我将提供一个分步指南来解决这个常见的 Git 问题。
为什么 Git 保留被忽略的文件?
任何进入 Git 的内容都会将其文件添加到 Git 的索引中,并创建对文件所做更改的记录。但是,它们仅通过.gitignore文件阻止新文件添加到索引中。一旦放入.gitignore中,这还不够——除非您指定此命令,否则 Git 仍将跟踪该文件。为此,您必须告诉 Git 忘记已跟踪的文件。分步指南:让 Git 忘记 .gitignore 中的已跟踪文件
以下是取消跟踪您已提交并希望忽略的文件的步骤步骤 1:将文件添加到 .gitignore
如果您尚未将文件名或模式添加到.gitignore,请将文件添加到.gitignore。这样,在成功忘记文件后,Git 不会在任何未来的提交中触及该文件。
打开您的.gitignore文件并添加以下行(将file_name替换为您的文件名)
file_name
步骤 2:停止 git 跟踪文件
其次,您希望从 Git 的索引中删除该文件,以便 Git 可以“忘记”该文件。请记住,此命令不会从您的工作目录中删除该文件,它只会从跟踪中删除该文件。git rm --cached file_name
替换file_name,使用您希望 Git 忘记的文件的名称。
命令解释
git rm --cached 从您的索引中删除文件,但不会从您的项目文件夹中删除。这意味着 Git 将停止跟踪该文件,但该文件仍以某种方式存在于您的本地目录中。步骤 3:提交更改
在您将文件从索引中取出后,我们必须实际提交这些更改以更新 git 存储库。使用以下命令git commit -m "Remove tracked file that is now in .gitignore"
Git 知道,由于您不再跟踪该文件,因此它将不再添加到索引中,因此它将在本次提交中告诉 Git:您不再希望跟踪此文件。
步骤 4:推送这些更改(如果您正在使用远程存储库)
如果您正在使用远程存储库(如 GitHub、GitLab 等),请注意不要忽略推送更改以更新远程存储库。git push
要停止跟踪文件并更新远程存储库,我们只需运行此命令。
示例:忽略匹配模式的多个文件
要从 Git 中删除多个文件,匹配某个模式,请将模式添加到.gitignore,并使用git rm --cached和通配符。例如,如果您希望 Git 停止跟踪所有 .log 文件,请将*.log添加到 .gitignore
*.log
然后,使用以下命令从索引中删除所有 .log 文件
git rm --cached *.log
完成后,提交并推送更改以结束。
重要说明:不要丢失本地更改
如果您希望 Git 忘记文件,但仍然不想丢失任何本地更改,请确保您已提交这些文件上的任何工作。在从 Git 索引中删除文件并将它们添加到.gitignore时保持本地文件不受损害,这希望永远不会发生,但备份任何重要工作总是一个好主意。步骤总结
- 将不需要的文件添加到.gitignore。
- 使用git rm --cached file_name从 Git 索引中删除文件。
- 使用git commit -m "Remove tracked file that is now in .gitignore"提交更改。
- 如果您正在使用远程存储库,请推送更改。
如果您按照这些步骤操作,那么您可以确保 Git 将停止跟踪您已在.gitignore中设置的文件。
提示
如果您有很多在最初被跟踪后需要忽略的文件,一种快速的方法让 Git “重新评估”.gitignore是删除索引中的所有跟踪文件,然后仅重新添加需要的文件
git rm -r --cached .
git add .
git commit -m "Reapply .gitignore settings"
以下命令序列临时删除 Git 的索引,并根据当前.gitignore文件重新添加所有文件,以便它不会跟踪任何被忽略的文件。
通过这些步骤,您将避免将不必要的文件跟踪到 Git 存储库中,从而节省空间并清理空间。编码愉快!
广告