One of my Git repositories has developed a tendency to refuse to checkout a feature branch locally that exists on the remote repo. My Git bash completion works, but then strange things happen! It turned out to be that I had two remotes with the same refspec, so I thought I'd write down the behaviour I saw and hopefully help someone else to fix this problem faster if they see it.
It started with not being able to check out a branch. I would see that my colleague had created
feature/cute-labels and usually I can just check out the branch name and Git makes a local branch from the remote one and sets it up to track, which is what I expected. But this time, even though the branch name autocompleted:
$ git checkout feature/cute-labels
error: pathspec 'feature/cute-labels' did not match any file(s) known to git.
So next I tried to create a branch and set what it tracked:
$ git checkout -b feature/cute-labels
Switched to a new branch 'feature/cute-labels'
$ git branch -u origin/feature/cute-labels
error: Not tracking: ambiguous information for ref refs/remotes/origin/feature/cute-labels
Ambiguous information ... interesting. I looked in
.git/config and sure enough I had two remotes which both had the same fetch line:
fetch = +refs/heads/*:refs/remotes/origin/*
We had a problem with our jump host one day and I'd added the https version of the repo as a separate remote but with the same pathspec. Since Git didn't know which remote I meant (and can't tell that they are the same thing), it didn't know what to do. This was a weird little problem that's been irritating me for probably a few weeks, so I was glad to understand it and be able to sort it out!