我只是试图检查我的主分支并遇到:
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,所以我们得到一个警告,即我们当前工作树中的文件将被覆盖(即使我们没有跟踪它)
所以:
删除分支B中现有目录中的文件(我只是将其移动到工作树最初为安全的地方)
检查你想要的分支 - 即分支A.
使用以下内容将其从分支A中删除:
git rm --cached app.xcodeproj/project.xcworkspace/xcuserdata/u.xcuserdatad/UserInterfaceState.xcuserstate
注意:Fwiw,分行A是我的主要分支.B分支是我的开发分支.
对于题题中的问题,一般可以这样解决:
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)