git rm --cached and fatal: pathspec
Solution 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:
delete the file in your existing directory (I just moved it somewhere out of the working tree initially to be safe) of branch B
check out the branch you want - i.e. branch A
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.
Solution 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.
Solution 3
simple:
git add file.ext
git rm --cached file.ext
or
git add path/*
git rm --cached path/*
Solution 4
Try --ignore-unmatch flag
I was getting the same error when trying to untrack some files that are already tracked by Git using a wildcard match, and since some seem not to exit, I was getting the error that file not matched, and that was crashing the whole operation. So I checked the manual and tried --ignore-unmatch flag, and it worked like a charm:
$ git rm --cached --ignore-unmatch cron/*.json
Related videos on Youtube
Snowcrash
Updated on January 27, 2021Comments
-
Snowcrash almost 3 years
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
-
CB Bailey about 11 yearsWhat makes you think that the working tree file isn't the issue? The error message says: "Untracked working tree file ... would be overwritten by merge". You're untracked working tree file is the issue; git doesn't want to blow it away as it contains untracked working changes.
-
Snowcrash about 11 yearsBut how would the working tree file be overwritten if it isn't being tracked by git? E.g. git rm --cached says it did not match any file.
-
CB Bailey about 11 yearsIt must be that a file exists at that location in the branch that you are trying to move to even though it doesn't exist in the commit that you are moving from. That's what the error message is telling you.
-
Snowcrash about 11 yearsYes, thanks for that. Just posted an answer with the full details of how I solved it finally.
-
-
PfunnyGuy over 4 years+1 for this, because it led to the truth about why I was getting this error. When I did
git add some_file
, the system repliedThe following paths are ignored by one of your .gitignore files: some_file
. face palm -
Timo over 1 yearStays the same, no difference when using the flag.
-
Timo over 1 yearAfter
git add
andgit status
, I getnew file path/file1..
. Then aftergit rm --cached path -r
I getUntracked files:(use "git add <file>..." to include in what will be committed)
which I got before googling my problem - so nothing improved and a forever loop created.