忽略已经提交到 Git 存储库的文件

我有一个已经初始化的 Git 存储库,向其中添加了一个.gitignore文件。如何刷新文件索引,以便忽略要忽略的文件?

答案

要取消跟踪已添加 / 初始化到存储库中的单个文件, 停止跟踪文件但不将其从系统中删除,请使用: git rm --cached filename

取消跟踪.gitignore现在的每个文件:

首先提交所有未完成的代码更改 ,然后运行以下命令:

git rm -r --cached .

这将从索引 (临时区域)中删除所有更改的文件,然后运行:

git add .

提交:

git commit -m ".gitignore is now working"

要撤消git rm --cached filename ,请使用git add filename

确保在运行git add .之前提交所有重要更改git add .否则,您将丢失对其他文件的任何更改。

如果您试图忽略对存储库中已经跟踪的文件的更改(例如,您需要针对本地环境进行更改的 dev.properties 文件,但您永远都不想签入这些更改),则超出了您想要做的事情是:

git update-index --assume-unchanged <file>

如果您想再次开始跟踪更改

git update-index --no-assume-unchanged <file>

参见git-update-index(1)手册页

如果您需要通过 git-reset 来保持更新( 通过 ),还可以查看 update-index 的skip-worktreeno-skip-worktree选项。


更新:由于人们一直在询问,这是一个方便的别名(自下面的评论进行了更新),用于查看本地工作区中当前 “忽略”(假定保留不变)的文件

$ git config --global alias.ignored = !git ls-files -v | grep "^[[:lower:]]"

要取消跟踪已经添加 / 初始化到存储库中的文件,即停止跟踪文件但不从系统中删除它,请使用: git rm --cached filename

是的.gitignore系统仅忽略当前不受 git 版本控制的文件。

也就是说,如果您已经使用git-add添加了一个名为test.txt的文件,那么将test.txt添加到.gitignore仍然会导致对test.txt更改进行跟踪。

您必须先git rm test.txt并提交更改。只有这样,对test.txt更改才会被忽略。

删除. gitignore 中的尾随空格

另外,请确保. gitignore 中没有尾随空格。我遇到这个问题是因为我正在寻找答案,所以我有一种有趣的感觉,我应该打开编辑器,而不是仅仅关注. gitignore。移除了一单到底额外的空间和现在的工作:)

我按照这些步骤

git rm -r --cached .
git add .
git reset HEAD

之后,git 删除所有应该忽略的文件(在我的情况下为 * .swp)。

如果您想停止跟踪文件而不从本地系统中删除文件,我更喜欢忽略config/database.yml文件。只需尝试:

git rm --cached config/database.yml
# this will delete your file from git history but not from your local system.

现在,将此文件添加到.gitignore文件并提交更改。从现在开始,git 不会跟踪对 config / database.yml 所做的任何更改。

$ echo config/database.yml >> .gitignore

谢谢

到处都有复杂的答案!

只需使用以下

git rm -r --cached .

它将从源文件而不是从计算机的主文件中删除您要忽略的文件!

之后,只需提交并推送即可!

要从跟踪中删除一些特定文件:

git update-index --assume-unchanged path/to/file

如果您想再次开始跟踪它:

git update-index --no-assume-unchanged path/to/file

正如 dav_i 所说的,为了将文件保存在回购中,并且在不创建额外提交的情况下将其从更改中删除,可以使用:

git update-index --assume-unchanged filename