Git and Mercurial have the concept of a local code repository, and a remote one. The user interface model doesn't work so well for me, with how these popular VCS are architected.
It seems like what is happening should be more obvious. I often need to commit my working copy changes to my local repo a bunch of times, rebase from remote to my local, and then push my local to the remote. Perhaps I don't fully understand the interface, but this involves several menu dives, to find the "push". Perhaps some different buttons would help.