git添加到.gitignore后仍显示文件已修改


252

我将其添加到.gitignore文件

.idea/*

但无论如何,状态为:

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

我究竟做错了什么 ?我什至将.idea / *添加到全局〜/ .gitignore_global 但git状态,反正向我显示:

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

Answers:


422

.gitignore正在工作,但是由于它们已经在索引中,因此它仍会跟踪文件。

要停止此操作,您必须执行以下操作: git rm -r --cached .idea/

当您提交.idea/目录时,将从git存储库中删除该目录,并且随后的提交将忽略该.idea/目录。

PS:您可以使用.idea/而不是.idea/*忽略目录。您可以.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.

您能否解释一下“仅添加.idea /也会起作用”的含义。这是使用.gitignore然后做的替代解决方案git rm -cached吗?
Mehrad 2015年

3
@Mehrad不需要.gitignore中的*
Steve

2
不,仅添加.idea /是行不通的,因为就像您在答案中所说的那样,它已经在索引中。
Henrique de Sousa 2015年

15
因此,您是说commit删除缓存文件后需要?这确实似乎违反直觉。这些是我不想提交的文件。而且我不希望它们从存储库中删除(我只是希望它们不再在混乱中困扰我git status)。还是我真的很困惑?
Scott Biggs

6
由于先前的提交,git已经跟踪了他的文件,因此,要删除它们,必须创建一个新的提交,以从存储库中删除它们。
mcls

47

对于可能仍在搜索此问题的人员,仅查看此页面。

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

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

这里是更多信息。

  1. 此命令将从索引中删除所有缓存的文件。
  2. 此命令将添加所有文件,但除外gitignore
  3. 该命令将再次提交您的文件,并删除您希望git忽略的文件,但将其保留在本地目录中。

1
这对我很有用,我只想注意在Windows cmd中单引号似乎在#3中不起作用。使用git commit -am“删除被忽略的文件”不过可以。
Sundance.101

1
不用担心,再次感谢您简洁明了的回答。
圣丹斯。

1
这个解决方案确实弄乱了我的项目文件。完成此操作后,我必须还原所有内容。
Fatmajk,

1

这里和其他地方提供的解决方案都不适用于我,因此我将为以后的读者增加讨论。我承认我还不完全了解该过程,但是终于解决了我的(类似)问题并希望分享。

在Windows 10上的IntelliJ IDEA中使用git时,我不小心缓存了几百个文件目录的文档目录,将它们添加到.gitignore(并可能将它们四处移动)后,我无法将它们从默认更改列表中删除。

我首先承诺所做的实际更改,然后继续解决此问题-花了我太多时间。我尝试过git rm -r --cached .但总是会出现path-spec错误,path-spec以及-f-r标志的不同变化。

git status仍会显示文件名,因此我尝试将其中一些字词与一起使用git rm -cached,但没有运气。存储和取消存储更改似乎有效,但是一段时间后它们又重新排队(在确切的时间范围内,我有点朦胧)。我终于删除了这些条目以利于使用

git reset

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


0

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

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


-2
  1. git添加。

  2. git状态//检查文件是否被修改

    // git reset HEAD ---替换为要忽略的文件

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

  4. git commit -m''

  5. git推


这是OP希望重置的假设。
苏联边疆
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.