git push -u ... sets the specified upstream tracking branch.
Meaning if it is not tracked already it would be set. If the branch is assigned an upstream tracking branch, change to the branch specified (overwrite). As such is normally only needed to be applied once when defining the upstream. 
Git push by default, does not automatically assign a remote tracking branch if the branch names are different, see the git-config documentation for details related to push.default.
Defines the action git push should take if no refspec is explicitly
  given. Different values are well-suited for specific workflows; for
  instance, in a purely central workflow (i.e. the fetch source is equal
  to the push destination), upstream is probably what you want. Possible
  values are:
nothing - do not push anything (error out) unless a refspec is
  explicitly given. This is primarily meant for people who want to avoid
  mistakes by always being explicit.
current - push the current branch to update a branch with the same
  name on the receiving end. Works in both central and non-central
  workflows.
upstream - push the current branch back to the branch whose changes
  are usually integrated into the current branch (which is called
  @{upstream}). This mode only makes sense if you are pushing to the
  same repository you would normally pull from (i.e. central workflow).
simple - in centralized workflow, work like upstream with an added
  safety to refuse to push if the upstream branch’s name is different
  from the local one.
When pushing to a remote that is different from the remote you
  normally pull from, work as current. This is the safest option and is
  suited for beginners.
This mode has become the default in Git 2.0.
matching - push all branches having the same name on both ends. This
  makes the repository you are pushing to remember the set of branches
  that will be pushed out (e.g. if you always push maint and master
  there and no other branches, the repository you push to will have
  these two branches, and your local maint and master will be pushed
  there).
git checkout -b marys-feature master
Is a shortcut for running
git branch marys-feature master
git checkout marys-feature
Which will create a new branch of master named marys-feature and change your working copy to marys-feature. 
See the official git-branch documentation for more details on creating a branch and changing your working copy.