+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
+