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

时间:2012-03-17 14:08:57

标签: git gitignore

我将此添加到 .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

9 个答案:

答案 0 :(得分:317)

您的.gitignore正在运行,但它仍会跟踪文件,因为它们已经在索引中。

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

当您提交时,将从您的git存储库中删除.idea/目录,以下提交将忽略.idea/目录。

PS:您可以使用.idea/代替.idea/*来忽略目录。您可以在the .gitignore man page上找到有关模式的更多信息。


来自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.

答案 1 :(得分:15)

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

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

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

Here更多信息。

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

答案 2 :(得分:3)

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

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

我首先承诺所做的实际更改,然后着手解决此问题-花了我太多时间。 我尝试了git rm -r --cached .,但始终会出现path-spec错误,并带有path-spec的不同变体以及-f-r标志。

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

git reset

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

答案 3 :(得分:2)

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

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

答案 4 :(得分:2)

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

我不知道为什么会这样。我想要的只是保持我的本地配置隔离(否则我必须在每次提交之前评论 localhost 基本 URL),而不是删除与 config 等效的远程配置。

阅读更多内容后,我发现似乎是 the proper way to do this,这是完成我需要的唯一方法,尽管它确实需要更多关注,尤其是在合并期间。

无论如何,它只需要git update-index --assume-unchanged *path/to/file*

据我所知,这是最值得注意的事情:

<块引用>

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

答案 5 :(得分:1)

如果你已经在你的 .gitignore 中添加了 .idea/* 并且如果 git rm -r --cached .idea/ 命令不起作用(注意:显示错误-> 致命:pathspec '.idea/' 不匹配任何文件)试试这个

从您的应用中删除 .idea 文件,运行此命令

rm -rf .idea

现在运行 git status 并检查 运行应用程序时,会再次创建 .idea 文件夹,但不会被跟踪

答案 6 :(得分:0)

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

答案 7 :(得分:0)

如果您使用类似 echo node_modules >> .gitignore

的内容保存它,也会发生这种情况

Windows 终端以 UCS-2 LE BOM 编码保存文件,而 git 似乎不接受。

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

notepad save utf-8 encoding

现在可以使用了。

我认为他们应该解决这个问题,因为执行 echo "filetoignore" >> .gitignore 实际上看起来很方便。

答案 8 :(得分:-1)

  1. 添加。
  2. Git状态//检查文件是否被修改

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

  3. git reset HEAD .idea / <-那些想在提交前排除.idea的人 // git检查状态和想法文件将消失,您就可以开始了!

  4. git commit -m''

  5. git push