(a) if you have 2 commits in your local repository which you haven't pushed to the remote yet, then your local branch is '2 commits ahead' of its upstream branch. Git can now also tell you about unsynced commits which you haven't pushed or pulled, yet. With an upstream branch set, you can simply use the shorthand commands 'git pull' and 'git push' - instead of having to think about the exact parameters like in 'git push origin development'. This relationship is very helpful for two reasons: Let's also say that you've set the remote 'origin/development' as its upstream branch. Let's say that your current local HEAD branch is named 'development'. Why should you set up an upstream branch for a local branch? In practice, however, in makes lots of sense to see them as counterparts - connected in a so-called 'tracking connection'. In theory, local and remote branches in Git are completely separate items.