意外将.idea目录文件提交到git

378

我不小心将.idea/目录提交到了Git中。这导致在我需要检出我的存储库时,到处都会发生冲突。我想知道如何从远程删除这些文件?

我仍然需要这些文件在本地,因为Intellij IDE需要它们。但我不希望它们存在于远程中。我已经将.idea/目录添加到了我的 .gitignore 文件中,并提交和推送了此文件到远程。然而,在另一台机器上检出时似乎没有效果。我仍然收到错误消息:

error: The following untracked working tree files would be overwritten by checkout:
.idea/.name
.idea/compiler.xml
.idea/copyright/profiles_settings.xml
.idea/encodings.xml
.idea/misc.xml
.idea/modules.xml
.idea/scopes/scope_settings.xml
.idea/uiDesigner.xml
.idea/vcs.xml
.idea/workspace.xml

11
您可以通过审查您的提交来避免这种情况发生。我建议在编写提交时使用-v运行commit以显示编辑器中的差异。这有助于防止此类错误,并帮助您将提交消息聚焦于您所更改的内容。 - Daenyth
Daenyth是正确的。此外,Git默认要求您将文件添加到已提交更改的列表中,因此利用它并不要一次提交所有内容。否则,您将污染您的存储库,就像添加.idea一样发生的那样。 - Tadeck
1
.idea文件夹中除了两个文件外,其余文件都应该被纳入源代码控制:http://devnet.jetbrains.com/docs/DOC-1186 - cja
我发现IntelliJ的.ignore插件在你想要管理不应该提交到git的所有文件时非常有用:https://plugins.jetbrains.com/plugin/7495?pr=idea - panza
嗨,如果我们在远程存储库中有.idea文件夹,会有什么危害吗? - milad salimi
显示剩余2条评论
6个回答

794

将.idea目录添加到忽略文件列表中

首先,将其添加到.gitignore中,以便您(或其他人)不会再次意外提交它:

.idea

从仓库中删除文件夹

第二步,仅从仓库中删除文件夹,但不要在本地删除它。为了实现这一点,按照以下步骤操作:

在不从本地文件系统中删除文件的情况下,从Git仓库中删除文件

将更改发送给其他人

第三步,提交.gitignore文件以及从仓库中删除的.idea文件。然后将其推送到远程仓库。

总结

整个过程如下:

$ echo '.idea' >> .gitignore
$ git rm -r --cached .idea
$ git add .gitignore
$ git commit -m '(some message stating you added .idea to ignored entries)'
$ git push

(可选)您可以将最后一行替换为git push some_remote,其中some_remote是您要推送到的远程名称。


5
注意:如果你在运行 git rm -r --cached .idea 时收到 fatal: pathspec '.idea' did not match any files 的消息,请删除你的 .idea 文件夹,从 Github 拉取最新代码后再次尝试。 - annedroiid
如果你遇到了@annedroiid的“未匹配任何文件”的错误,你可以尝试添加它的路径。就像当我删除database.yml文件时,我只需执行“git rm -r --cached config/database.yml”。 - Kaka Ruto
应该将.idea目录中的一些文件提交到您的代码库中。请参阅https://github.com/github/gitignore/blob/master/Global/JetBrains.gitignore,了解JetBrains关于.gitignore的建议。 - tokenizer_fsj
3
我死都无法将这个文件夹从我们的存储库中删除...切换分支仍会重新跟踪它...多个分支上的人运行了此操作...每次切换分支...git都认为它需要...在某个时刻...删除你的.idea文件夹,因此..简而言之..现在切换分支基本上就是对我们的设置进行清除。我尝试在主分支上运行它...然后合并到所有分支上...但仍在清除设置。 - nawlbergs
2
我们有没有一个永久的解决方案来设置 IntelliJ 从不将 .idea 文件夹添加到提交文件中? - Serhat
使用这个答案已经是第一百万次了。不幸的是,我只能点赞一次 :) - Micromegas

114
您可以从存储库中删除它并提交更改。
git rm .idea/ -r --cached
git add -u .idea/
git commit -m "Removed the .idea folder"

接下来,您可以将其推送到远程,之后每次检出/克隆都将正常。


12
这对我有用,与被接受的答案相反。也许是 git add -u 产生了差异。 - Paolo Mioni
你不需要第二行。 - kjdion84
就像其他人说的那样,我没有运行第二行。非常顺利!谢谢。 - blackkara

7
最好在主分支上执行此操作。
编辑.gitignore文件。 在其中添加以下行。
``` .idea ```
使用以下命令从远程存储库中删除.idea文件夹。
``` git rm -r --cached .idea ```
有关更多信息,请参考:不实际删除Git存储库中的文件 将.gitignore文件加入暂存区,使用以下命令
``` git add .gitignore ```
提交更改
``` git commit -m '已删除.idea文件夹' ```
推送到远程
``` git push origin master ```

1
如果你还没有推送到Git。
git rm .idea/ -r --cached
git add -u .idea/
git commit -m "Removed the .idea folder"

如果 "git rm .idea/ -r --cached" 抛出错误 "fatal: pathspec '.idea' did not match any files" 并且已经将 .idea 推送到 git 上。
git push origin --delete remoteBranchName
git add . //Everything is up to date
git commit -m "Removed the .idea folder" //Nothing to commit
git push origin remoteBranchName

0

你应该向你的项目中添加一个.gitignore文件,并在其中添加/.idea。你需要每行添加一个目录/文件。

如果你已经存在一个.gitignore文件,那么你只需要在文件中添加一行并将/.idea放到新行中。

之后运行git rm -r --cached .idea命令。

如果你遇到错误,可以运行git rm -r -f --cached .idea命令。最后运行git add .,然后运行git commit -m "Removed .idea directory and added a .gitignore file",最后通过运行git push命令推送更改。


0
为了避免这个问题再次发生,我发现拥有一个包含.idea的全局gitignore文件非常有用,例如:
$ echo '.idea' >> ~/.gitignore_global
$ git config --global core.excludesfile ~/.gitignore_global

另一个优点是,您无需在项目的 .gitignore 文件中添加 IDE 的详细信息。另一方面,您也可以选择将 .idea 添加到项目的 .gitignore 中,以便其他贡献者不会遇到问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接