git rm --cached and fatal:pathspec

时间:2012-09-24 12:13:26

标签: git git-rm

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

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 个答案:

答案 0 :(得分:15)

所以,解决方法是:

该文件未在当前分支B

中进行跟踪

但它存在于我们试图检查的分支中,分支A,所以我们得到一个警告,即我们当前工作树中的文件将被覆盖(即使我们没有跟踪它)

所以:

  1. 删除现有目录中的文件(我刚将其移动到工作树的某个地方,最初是安全的)分支B

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

  3. 使用以下内容从分支A中删除它:

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

  4. 注意: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