I would gladly have written a more precise topic for this question, but I cannot express it better at the moment.

Basically, let's say you have a repo where you have several branches, say "master" and "mybranch".

So, let's say you're on master:

```
$ git status
On branch master
Your branch is up to date with 'origin/master'.

nothing to commit, working tree clean

```

Then you do `git pull` here; new commits are retrieved both for `master` branch, and the `mybranch`. Since you are already in branch `master`, `master` has its HEAD automatically updated by `git` to the latest received commit.

Now, let's say you change branch using checkout:

```
$ git checkout mybranch
Switched to branch 'mybranch'
Your branch is behind 'origin/mybranch' by 2 commits, and can be fast-forwarded.
  (use "git pull" to update your local branch)

```

Now this is what puzzles me - in the previous pull, (apparently) all of the latest commits - including those in `mybranch` - had been retrieved; otherwise my local git would not "know" that my local branch "is behind ... by 2 commits".

So my question is: why would I need to do "git pull" again, having a needless roundtrip to the server - when we already have those new commits for `mybranch` downloaded? Isn't there a "git update-head" or some command, which would do it locally, without a round-trip to the server?