git rm --cached and fatal: pathspec

China☆狼群 提交于 2019-12-10 01:23:54

问题


I just tried to checkout my master branch and ran into:

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

So, I tried to delete this file from git (I'd already added an expression in .gitignore to catch it) using:

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

and got:

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

So, at a bit of a loss. From my understanding the working file isn't the issue here. However, for completeness, a working file does exist. E.g.

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

回答1:


So, the solution is this:

The file is untracked in this current branch B

But it exists in the branch we are trying to check out, branch A, so we get a warning that the file in our current working tree will be overwritten (even though we aren't tracking it)

So:

  1. delete the file in your existing directory (I just moved it somewhere out of the working tree initially to be safe) of branch B

  2. check out the branch you want - i.e. branch A

  3. Remove it from branch A using something like this:

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

Note: Fwiw, Branch A was my master branch. Branch B was my dev branch.




回答2:


For the issue in the question title, you can generally solve it this way:

git rm --cached *

fatal: pathspec 'blah' did not match any files 

git ls-files

That will list the files git does have in its index, and you can then remove them explicitly one by one. If for example it lists img/blah.jpg:

git rm --cached img/blah.jpg

This will solve the pathspec error in the more general case, whether it's a branching issue as it was in the other answer here, or a new .gitignore entry, or a result of using 2 repos in the same dir, etc.




回答3:


simple:

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

or

git add path/*
git rm --cached path/*


来源:https://stackoverflow.com/questions/12564855/git-rm-cached-and-fatal-pathspec

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!