我只是试图检查我的主分支并遇到:
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
答案 0 :(得分:15)
所以,解决方法是:
该文件未在当前分支B
中进行跟踪但它存在于我们试图检查的分支中,分支A,所以我们得到一个警告,即我们当前工作树中的文件将被覆盖(即使我们没有跟踪它)
所以:
删除现有目录中的文件(我刚将其移动到工作树的某个地方,最初是安全的)分支B
查看您想要的分支 - 即分支A
使用以下内容从分支A中删除它:
git rm --cached app.xcodeproj / project.xcworkspace / xcuserdata / u.xcuserdatad / UserInterfaceState.xcuserstate
注意:Fwiw,分行A是我的主要分支。 B分支是我的开发分支。
答案 1 :(得分:4)
对于问题标题中的问题,通常可以这样解决:
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的结果等等。
答案 2 :(得分:2)
简单:
git add file.ext
git rm --cached file.ext
或
git add path/*
git rm --cached path/*
答案 3 :(得分:1)
试试 --ignore-unmatch 标志
在尝试使用通配符匹配取消跟踪 Git 已跟踪的某些文件时,我遇到了同样的错误,并且由于有些文件似乎没有退出,我收到了文件不匹配的错误,这导致整个系统崩溃手术。所以我检查了手册并尝试了 --ignore-unmatch 标志,它就像一个魅力:
$ git rm --cached --ignore-unmatch cron/*.json