26

我只是试图检查我的主分支并遇到:

error: Untracked working tree file 'app.xcodeproj/project.xcworkspace/xcuserdata/u.xcuserdatad/UserInterfaceState.xcuserstate' would be overwritten by merge. 

因此,我尝试使用以下命令从 git 中删除此文件(我已经在 .gitignore 中添加了一个表达式来捕获它):

git rm --cached app.xcodeproj/project.xcworkspace/xcuserdata/u.xcuserdatad/UserInterfaceState.xcuserstate

并得到:

fatal: pathspec 'app.xcodeproj/project.xcworkspace/xcuserdata/u.xcuserdatad/UserInterfaceState.xcuserstate' did not match any files 

所以,有点亏。据我了解,工作文件不是这里的问题。但是,为了完整起见,确实存在工作文件。例如

ls -l app.xcodeproj/project.xcworkspace/xcuserdata/u.xcuserdatad/UserInterfaceState.xcuserstate
-rw-r--r--  1 u  u  56061 24 Sep 12:42 app.xcodeproj/project.xcworkspace/xcuserdata/u.xcuserdatad/UserInterfaceState.xcuserstate
4

4 回答 4

18

所以,解决方案是这样的:

该文件在当前分支 B 中未被跟踪

但它存在于我们尝试签出的分支 A 中,因此我们收到警告,指出当前工作树中的文件将被覆盖(即使我们没有跟踪它)

所以:

  1. 删除分支 B 的现有目录中的文件(为了安全起见,我只是将其移出工作树的某个位置)

  2. 查看您想要的分支 - 即分支 A

  3. 使用以下方法将其从分支 A 中删除:

    git rm --cached app.xcodeproj/project.xcworkspace/xcuserdata/u.xcuserdatad/UserInterfaceState.xcuserstate

注意:Fwiw,分支 A 是我的主分支。B 分支是我的开发分支。

于 2012-09-24T12:46:15.687 回答
10

对于题名中的问题,一般可以这样解决:

git rm --cached *

fatal: pathspec 'blah' did not match any files 

git ls-files

这将列出 git 在其索引中确实具有的文件,然后您可以一一明确地删除它们。例如,如果它列出img/blah.jpg

git rm --cached img/blah.jpg

这将解决更一般情况下的 pathspec 错误,无论是此处的其他答案中的分支问题,还是新的 .gitignore 条目,或者在同一目录中使用 2 个 repos 的结果等。

于 2015-01-02T19:42:04.327 回答
6

简单的:

git add file.ext
git rm --cached file.ext

或者

git add path/*
git rm --cached path/*
于 2017-10-03T22:23:42.247 回答
2

尝试 --ignore-unmatch 标志

尝试使用通配符匹配取消跟踪 Git 已经跟踪的某些文件时,我遇到了同样的错误,并且由于有些文件似乎没有退出,我收到了文件不匹配的错误,这导致整个操作崩溃。所以我检查了手册并尝试了--ignore-unmatch标志,它就像一个魅力:

$ git rm --cached --ignore-unmatch cron/*.json

于 2021-01-26T10:41:57.940 回答