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


当前回答

复杂的答案无处不在!

只需使用以下内容

git rm -r --cached .

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

之后,只需提交并推送!

其他回答

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

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

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

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

要取消跟踪.gitignore中的每个文件,请执行以下操作:

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

git rm -r --cached .

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

git add .

提交:

git commit -m ".gitignore is now working"

要撤消git rm--缓存的文件名,请使用git add filename。

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

请小心,当您将其推送到存储库并从其他位置拉到仍在跟踪这些文件的状态时,这些文件将被删除

如果您试图忽略对存储库中已跟踪的文件所做的更改(例如,您需要为本地环境更改的dev.properties文件,但您永远不想签入这些更改),那么您要做的是:

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

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

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

参见git更新索引(1)手册页。

如果您需要在git重置后继续使用,请查看更新索引的跳过工作树和无跳过工作树选项(通过)


更新:由于人们一直在问,这里有一个方便的(并在下面评论后进行了更新)别名,用于查看本地工作区中哪些文件当前被“忽略”(--假设未更改)

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

感谢你的回答,我能够写下这个小单行来改进它。我在.gitignore和repo上运行了它,没有任何问题,但如果有人看到任何明显的问题,请评论。这应该是git rm-r--cached from.gitignore:

cat $(git rev-parse --show-toplevel)/.gitIgnore | sed "s/\/$//" | grep -v "^#" | xargs -L 1 -I {} find $(git rev-parse --show-toplevel) -name "{}" | xargs -L 1 git rm -r --cached

注意,你会得到很多致命的错误:pathspec“<pathspec>”与任何文件都不匹配。这只是针对尚未修改的文件。

要从跟踪中删除几个特定文件,请执行以下操作:

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

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

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