git rm --cached and fatal:pathspec

Sno*_*ash 16 git git-rm

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

error: Untracked working tree file 'app.xcodeproj/project.xcworkspace/xcuserdata/u.xcuserdatad/UserInterfaceState.xcuserstate' would be overwritten by merge. 
Run Code Online (Sandbox Code Playgroud)

所以,我试图从git中删除这个文件(我已经在.gitignore中添加了一个表达式来捕获它):

git rm --cached app.xcodeproj/project.xcworkspace/xcuserdata/u.xcuserdatad/UserInterfaceState.xcuserstate
Run Code Online (Sandbox Code Playgroud)

得到了:

fatal: pathspec 'app.xcodeproj/project.xcworkspace/xcuserdata/u.xcuserdatad/UserInterfaceState.xcuserstate' did not match any files 
Run Code Online (Sandbox Code Playgroud)

所以,有点亏.根据我的理解,工作文件不是问题.但是,为了完整性,确实存在工作文件.例如

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

Sno*_*ash 16

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

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

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

所以:

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

  2. 检查你想要的分支 - 即分支A.

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

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

注意:Fwiw,分行A是我的主要分支.B分支是我的开发分支.


Chr*_*ini 8

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

git rm --cached *

fatal: pathspec 'blah' did not match any files 

git ls-files
Run Code Online (Sandbox Code Playgroud)

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

git rm --cached img/blah.jpg
Run Code Online (Sandbox Code Playgroud)

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


小智 7

简单的:

git add file.ext
git rm --cached file.ext
Run Code Online (Sandbox Code Playgroud)

或者

git add path/*
git rm --cached path/*
Run Code Online (Sandbox Code Playgroud)