This is the expected behavior. The branches in a repository (what you see when you run "git branch" with no arguments") are different from the remote-tracking refs (what you see when you run "git branch -r", and which are updated by "git fetch"). You can't track another repository's remote-tracking refs with your remote-tracking refs, just its actual branches. The part which may be confusing is that "git checkout", as a shortcut, lets you attempt to check out a branch that does not exist, and if a branch with the same name exists on a remote, it will create the branch and set it up to track that remote branch. If you wanted to fetch branches from multiple other repositories, though, you would ordinarily add those repositores as remotes, rather than pushing everything through a single existing remote. Hope that helps.