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.