fetch in git doesn't get all branches
The problem can be seen when checking the remote.origin.fetch
setting
(The lines starting with $
are bash prompts with the commands I typed. The other lines are the resulting output)
$ git config --get remote.origin.fetch
+refs/heads/master:refs/remotes/origin/master
As you can see, in my case, the remote was set to fetch the master branch specifically and only. I fixed it as per below, including the second command to check the results.
$ git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"
$ git config --get remote.origin.fetch
+refs/heads/*:refs/remotes/origin/*
The wildcard *
of course means everything under that path.
Unfortunately I saw this comment after I had already dug through and found the answer by trial and error.
I had this issue today on a repo.
It wasn't the +refs/heads/*:refs/remotes/origin/*
issue as per top solution.
Symptom was simply that git fetch origin
or git fetch
just didn't appear to do anything, although there were remote branches to fetch.
After trying lots of things, I removed the origin remote, and recreated it. That seems to have fixed it. Don't know why.
remove with:
git remote rm origin
and recreate with:
git remote add origin <git uri>
Remote update
You need to run
git remote update
or
git remote update <remote>
Then you can run git branch -r
to list the remote branches.
Checkout a new branch
To track a (new) remote branch as a local branch:
git checkout -b <local branch> <remote>/<remote branch>
or (sometimes it doesn't work without the extra remotes/
):
git checkout -b <local branch> remotes/<remote>/<remote branch>
Helpful git cheatsheets
- Git Cheat Sheet (My personal favorite)
- Some notes on git
- Git Cheat Sheet (pdf)