添加到.gitignore后,Git仍然显示修改后的文件

我将此添加到.gitignore文件

.idea/*

但无论如何,现状是:

#       modified:   .gitignore
#       modified:   .idea/.generators
#       modified:   .idea/dovezu.iml
#       modified:   .idea/misc.xml
#       modified:   .idea/workspace.xml

我做错了什么? 我甚至在全局~ / .gitignore_global中添加了.idea/* 但是git的状态显示:

#       modified:   .gitignore
#       modified:   .idea/.generators
#       modified:   .idea/dovezu.iml
#       modified:   .idea/misc.xml
#       modified:   .idea/workspace.xml
151767 次浏览

你的.gitignore正在工作,但它仍然跟踪文件,因为它们已经在索引中。

要停止这种情况,你必须执行:git rm -r --cached .idea/

当你提交时,.idea/目录将从你的git存储库中移除,接下来的提交将忽略.idea/目录。

PS:你可以用.idea/代替.idea/*来忽略一个目录。你可以在< em >。Gitignore 手册页上找到更多关于模式的信息。


来自git-rm手册页的有用引用

--cached
Use this option to unstage and remove paths only from the index.
Working tree files, whether modified or not, will be left alone.

对于那些可能仍然在搜索这个问题的人,只看这一页。

这将帮助你删除缓存的索引文件,然后只添加你需要的索引文件,包括对你的.gitignore文件的更改。

1. git rm -r --cached .
2. git add .
3. git commit -m 'Removing ignored files'

在这里是更多的信息。

  1. 此命令将从索引中删除所有缓存文件。
  2. 该命令将添加除gitignore中提到的文件之外的所有文件。
  3. 这个命令将再次提交文件,并删除你想让git忽略的文件,但将它们保存在本地目录中。
  1. Git添加。

  2. Git状态//检查正在修改的文件

    // git reset HEAD—替换为你想忽略的文件

  3. git reset HEAD .idea/ <——那些想要在提交前排除.idea的人 // git检查状态和想法文件将消失,你已经准备好了!< / p >

  4. git commit -m "

  5. < p > git推动

只需添加git rm -r --cached <folder_name/file_name>

有时,在文件的commit命令之后更新.gitignore文件。文件被缓存在内存中。要删除缓存的文件,使用上面的命令。

这里和其他地方提供的解决方案对我不起作用,所以我将为将来的读者补充讨论。我承认我还没有完全理解这个过程,但我终于解决了我的(类似的)问题,想要分享。

当我在Windows 10上的IntelliJ IDEA中使用git时,我意外地缓存了一些包含数百个文件的文档目录,在将它们添加到.gitignore后(可能会移动它们一点),我无法将它们从默认更改列表中删除。

我首先提交了我所做的实际更改,然后着手解决这个问题——花了我太长时间。 我尝试了git rm -r --cached .,但总是得到path-spec ERRORS,具有不同的path-spec变体以及-f-r标志

git status仍然会显示文件名,所以我尝试在git rm -cached中逐字使用其中一些文件名,但运气不好。 存储和解存储更改似乎是有效的,但它们在一段时间后再次排队(我对确切的时间框架有点不清楚)。 我最终使用

删除了这些条目
git reset

我认为这只是一个好主意,当您没有真正想要提交的暂存/缓存更改时。

如果你已经在你的。gitignore中添加了。idea/* git rm -r --cached .idea/命令不工作(注意:显示错误-> 致命的:pathspec '。Idea /' did not match any files) try this

从你的应用中删除。idea文件运行这个命令

rm -rf .idea

现在运行git status检查 在运行app时,将再次创建.idea文件夹,但它不会被跟踪

在我的例子中,.gitignore文件以某种方式损坏了。它有时显示得很好,但有时是胡言乱语。我想编码可能是罪魁祸首,但不能确定。为了解决这个问题,我删除了这个文件(之前在VS Code命令行中通过echo > .gitgore创建的),并在文件系统(资源管理器)中手动创建了一个新的文件,然后添加了我的忽略规则。在新的.ignore就位后,一切工作正常。

使用git rm --cached *file*对我来说不是很好(我知道这个问题已经8年了,但它仍然显示在搜索这个主题的顶部),它确实从索引中删除了文件,但它也从远程中删除了文件。

我不知道这是为什么。我所希望的是保持本地配置的隔离(否则我必须在每次提交之前注释localhost基url),而不是删除与配置相同的远程配置。

读更多的书,我发现什么似乎是正确的方法,唯一的方法,做什么我需要,虽然它确实需要更多的注意,特别是在合并。

不管怎样,它所需要的只是git update-index --assume-unchanged *path/to/file*

据我所知,这是最值得记住的事情:

Git会失败(优雅地),如果它需要在索引中修改这个文件,例如在提交合并时;因此,如果假设未跟踪的文件在上游被更改,您将需要手动处理这种情况。

如果你用echo node_modules >> .gitignore之类的东西保存它,也会发生这种情况

windows终端以UCS-2 LE BOM编码保存文件,git似乎不接受这一点。

因此,你可以用Notepad打开文件,并用UTF-8编码保存

notepad save utf-8 encoding

现在起作用了。

我认为他们应该修复这个问题,因为做echo "filetoignore" >> .gitignore实际上似乎非常方便。

我插一句。在我的例子中,子目录中有一个git repo,因为我从其他人那里解压缩了一个zip文件,然后递归地将他们解压缩zip中的所有内容复制到我的repo中,而没有检查我正在复制什么。

一旦我吹走了我现有的repo中的.git目录,一切都很好。

update-index --skip-worktree

忽略配置文件的特定git选项是:

$ git update-index --skip-worktree <filepath>

注意有没有必要再加什么了 .gitignore

取消 this,例如当配置文件的一般结构发生变化时:

$ git update-index --no-skip-worktree <filepath>

--skip-worktree用于指示git永远不要将文件更改索引到特定的文件。这可能是因为开发人员通常需要在本地更改文件以测试项目。例如,如果主存储库上游托管了一个可用于生产的配置文件,那么应该防止对该文件的意外提交更改。

--assume-unchanged假设开发人员永远不应该更改该文件。此标志仅用于提高git的性能,而不会更改软件开发工具包(SDK)组件等文件夹。

这将允许您删除缓存的索引文件,然后只添加您需要的索引文件,包括对.gitignore文件的更改。

  1. Git rm -r——cached。
  2. Git添加。
  3. git commit -m删除被忽略的文件

这些行动可以实现以下目标:

步骤1:该命令将清除所有缓存文件的索引。

步骤2:该命令将添加文件 gitignore列表。< / p >

步骤3:通过使用这个命令,你可以删除你想git的文件 忽略,同时保持他们在您的本地目录和重新提交您的 文件。< / p >