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

Sai*_*aev 212 git gitignore

我正在将此添加到.gitignore文件中

.idea/*
Run Code Online (Sandbox Code Playgroud)

但无论如何,状态是:

#       modified:   .gitignore
#       modified:   .idea/.generators
#       modified:   .idea/dovezu.iml
#       modified:   .idea/misc.xml
#       modified:   .idea/workspace.xml
Run Code Online (Sandbox Code Playgroud)

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

#       modified:   .gitignore
#       modified:   .idea/.generators
#       modified:   .idea/dovezu.iml
#       modified:   .idea/misc.xml
#       modified:   .idea/workspace.xml
Run Code Online (Sandbox Code Playgroud)

maa*_*cls 356

.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.
Run Code Online (Sandbox Code Playgroud)

  • 所以你说你在删除缓存文件后需要`commit`?这看起来非常直观; 这些是我不想提交的文件.而且我不希望它们从存储库中删除(我只是希望它们不再混淆我的`git status`).或者我真的很困惑? (13认同)
  • 由于早期的提交,他的文件已经被git跟踪,因此为了删除它们,你必须创建一个新的提交,将它们从存储库中删除. (4认同)
  • @Mehrad不需要.gitignore中的* (3认同)
  • `git rm -r --cached *` 我使用此命令删除了所有缓存的所有类型的文件...但它删除了我的所有文件...请帮助我撤消此操作!@maartencls (3认同)
  • 不,只是添加.idea /不起作用,因为就像你在答案中说的那样,它已经在索引中了. (2认同)

小智 32

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

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

阅读更多内容我发现似乎是执行此操作的正确方法,也是完成我需要的操作的唯一方法,尽管它确实需要更多关注,尤其是在合并期间。

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

据我了解,这是最值得注意的事情:

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

  • 很高兴终于找到了一个适用于现代 Git 的解决方案(2022 年)。`git update-index --assume-unchanged .mydir/myfile` 非常适合未被忽略的“卡住”文件。 (2认同)

小智 25

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

这样做,瞧,它将被分类.

  1. git rm -r --cached.
  2. git add -A
  3. git commit -m'删除被忽略的文件'

资源

first命令将从索引中删除所有文件

第二个命令将添加除gitignore中提到的文件之外的所有文件

last命令将再次提交您的文件并删除您希望git忽略的文件,但将它们保存在本地目录中.

注意:在Windows的第3步中使用"删除被忽略的文件".

  • 这个解决方案确实弄乱了我的项目文件。完成此操作后我必须恢复一切。 (5认同)
  • 这对我很有用,我只是注意到在 windows cmd 中,单引号在 #3 中似乎不起作用。不过,使用 git commit -am "删除被忽略的文件" 确实有效。 (2认同)
  • 这是最好的答案,要做好解释。 (2认同)
  • 您不需要删除所有您可以仅删除您不想包含在中的文件ignore git rm -r --cached file_name ..其余步骤都可以 (2认同)

Ser*_*ndt 10

update-index --skip-worktree

忽略配置文件的具体git选项是:

$ git update-index --skip-worktree <filepath>
Run Code Online (Sandbox Code Playgroud)

请注意,无需向 中添加任何内容 .gitignore

要取消此操作,例如当配置文件的通用结构发生更改时:

$ git update-index --no-skip-worktree <filepath>
Run Code Online (Sandbox Code Playgroud)

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

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


kil*_*ton 6

这里和其他地方提供的解决方案对我来说不起作用,所以我将添加到未来读者的讨论中。诚然,我还没有完全理解该过程,但终于解决了我的(类似)问题并想分享。

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

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

git status仍然会显示文件名,所以我尝试逐字使用其中一些文件名git rm -cached,但没有运气。存储和取消存储更改似乎有效,但一段时间后它们再次排队(我对确切的时间范围有点模糊)。我终于删除了这些条目以便更好地使用

git reset
Run Code Online (Sandbox Code Playgroud)

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


小智 5

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

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

这些操作可实现以下目的:

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

步骤 2:此命令将添加除 gitignore 列表中的文件之外的所有文件。

步骤 3:通过使用此命令,您可以删除您希望 git 忽略的文件,同时将它们保留在本地目录中并重新提交您的文件。


归档时间:

查看次数:

71758 次

最近记录:

6 年,3 月 前