This is necessary by design. When you are performing a git-pull, the branch name you are pulling from is a remote branch. It has no choice but to contact the remote repository in order to get the list of possible completions.
You can prove this to yourself if you try to auto-complete a git-push command. Completing the branch name master will be much quicker because you are pushing a local branch, so you won't need to contact the remote repository.
If you want to make auto-complete always complete using local branch names, then you can change the behavior. This might only be useful if your local branch names are identical to remote branch names. Edit the file ~/.git-completion.bash and around line 458, look for this code:
fetch)
if [ $lhs = 1 ]; then
__gitcomp "$(__git_refs2 "$remote")" "$pfx" "$cur"
else
__gitcomp "$(__git_refs)" "$pfx" "$cur"
fi
;;
pull)
if [ $lhs = 1 ]; then
__gitcomp "$(__git_refs "$remote")" "$pfx" "$cur"
else
__gitcomp "$(__git_refs)" "$pfx" "$cur"
fi
;;
push)
if [ $lhs = 1 ]; then
__gitcomp "$(__git_refs)" "$pfx" "$cur"
else
__gitcomp "$(__git_refs "$remote")" "$pfx" "$cur"
fi
;;
esac
...and change it to this:
fetch)
if [ $lhs = 1 ]; then
__gitcomp "$(__git_refs)" "$pfx" "$cur"
else
__gitcomp "$(__git_refs "$remote")" "$pfx" "$cur"
fi
;;
pull)
if [ $lhs = 1 ]; then
__gitcomp "$(__git_refs)" "$pfx" "$cur"
else
__gitcomp "$(__git_refs "$remote")" "$pfx" "$cur"
fi
;;
push)
if [ $lhs = 1 ]; then
__gitcomp "$(__git_refs)" "$pfx" "$cur"
else
__gitcomp "$(__git_refs "$remote")" "$pfx" "$cur"
fi
;;
esac
(Notice that we changed the "fetch" and "pull" sections to use the same logic as "push". This means it will be looking for local branch names instead of remote branches.)