The first command fetches commits from the named BRANCH in the REMOTE
repository that are not in your repository and leaves the id (the
hash) of the head commit in file .git/FETCH_HEAD. But it doesn't
-update any branch (doesn't move any label).
+update any branch (doesn't move any pointer).
The second command fetches commits from the named BRANCH in the REMOTE
repository that are not in your repository and updates both the local
# rebase instead of merge
$ git merge v1
+It is possible to configure git to make it fetch/pull a few branches
+or all branches at once, so you can simply run
+
+::
+
+ $ git pull origin
+
+or even
+
+::
+
+ $ git pull
+
+Push
+''''
+
+Pushing is a bit simpler. There is only one command ``push``. When you
+run
+
+::
+
+ $ git push origin v1 v2
+
+git guesses (knowing upstream remote branches) that you really want
+
+::
+
+ $ git push origin v1:v1 v2:v2
+
+Git pushes commits to the remote repo and updates remote branches. It
+is possible to configure git to make it push a few branches or all
+branches at once, so you can simply run
+
+::
+
+ $ git push origin
+
+or even
+
+::
+
+ $ git push
+
+Git refuses to push a branch if it's the current branch in the remote
+non-bare repository: git refuses to update remote working directory.
+You really should push only to bare repositories. For non-bare
+repositories git prefers pull-based workflow.
+
+Tags
+''''
+
+Git automatically fetches tags that point to commits being fetched
+during fetch/pull. To fetch all tags (and commits they point to) run
+``git fetch --tags origin``. To fetch some specific tags fetch them
+explicitly::
+
+ $ git fetch origin tag NAME1 tag NAME2...
+
+For example::
+
+ $ git fetch origin tag 1.4.2 tag 2.1.7
+
+Git doesn't automatically pushes tags. That allows you to have private
+tags (lightweight tags are also private for a repo, they cannot be
+pushed). To push tag(s) list them explicitly::
+
+ $ git push origin tag 1.4.2
+ $ git push origin v1 v2 tag 2.1.7
+
Commit editing and caveats
==========================