In my situation I was tracking a remote hotfix branch which someone else merged and removed.
I have deleted my local branch but when I pull I still get the above error because I have the following lines in my git config file:
[remote "origin"]
...
fetch = +refs/heads/foo/bar:refs/remotes/origin/foo/bar
push = +refs/heads/foo/bar:refs/for/foo/bar
...
The error can be resolved by deleting these lines from the file but is there a way to do it from the command line?
There is, but it's generally a lot more difficult than manual editing, if you want to get rid of just the one matching line.
The command to modify a git configuration file is
git config. It has--unset,--unset-all, and--remove-sectionoptions for deleting one, all matching, or all entries in some particular section or key.The section, in this case, is
remote.origin(because it's in[remote "origin"]in the file) and the key isremote.origin.fetch. You would not want to remove the entire section, in this case, so that leaves--unsetand--unset-allas possibilities.There can be more than one
fetchline, and more than onepushline. In other words there can be multiple copies of one key, with different values.If there is just one
remote.origin.fetchline, and you want to remove it, you can simply:If you try this on a repository with multiple fetch lines, you get:
and you will find that nothing is removed (at least that is what I got with git 2.1.0). In this case, you need the more complex variants, either
--unset-all(remove all theremote.origin.fetchkeys) or--unset key value_regex(remove those keys whose value matchesvalue_regex).Since you presumably only want to unset the one matching line, you must come up with a regular expression that matches that one line, and only that one line. Read through the
git configdocumentation to come up with a suitable regular expression; note that since these are POSIX "extended" REs, a bare+character means "one or more of the previous character", so+refs/...does not work as the "previous character" part is missing. (These are also clearly un-anchored, based on the documentation.) In this case,:refs/remotes/origin/foo/baris probably sufficient, but you could get fancier.To remove the
pushentry, repeat the above steps but withremote.origin.pushas the key.(Or just use your favorite editor and interactively delete the right lines, which is a lot easier, albeit not very suitable for a script...)