我将此添加到 .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
答案 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更多信息。
- 此命令将从索引中删除所有缓存的文件。
- 此命令将添加除
gitignore
中提到的文件以外的所有文件。- 此命令将再次提交您的文件并删除您希望git忽略的文件,但将它们保存在本地目录中。
醇>
答案 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
编码保存
现在可以使用了。
我认为他们应该解决这个问题,因为执行 echo "filetoignore" >> .gitignore
实际上看起来很方便。
答案 8 :(得分:-1)
Git状态//检查文件是否被修改
// git reset HEAD ---将要替换的文件替换为
git reset HEAD .idea / <-那些想在提交前排除.idea的人 // git检查状态和想法文件将消失,您就可以开始了!
git commit -m''