You’ve probably known that repository is usually divided into three separate directories. Short explanations, for the folks who haven’t used them :

Branch:
Every time you release a major version, it gets a branch created. This allows you to do bug fixes and make a new release without having to release the newest – possibly unfinished or untested – features. For instance you want to add feature X, but you are not sure if it will work or not and you don’t want to merge it to trunk without testing then you’ll create a separate branch and do your changes at this branch then you’ll merge it to the trunk.

Trunk: This is the main development place. The commits that you are applying must effect here. If you created a branch then you can merge with branch and trunk later on.

Tag: A definite time in the development. This is usually the point in time on the trunk or a branch that you wish to preserve. There can be two reasons for creating tags, either you have a major release of the software like alpha, beta, RC or RTM, or you want to have the most stable point of the software before major revisions on the trunk were applied.

In git branching, tagging and creating trunks are fairly easy:

To create a tag:

git tag -a tag_name

“-a” : make an unsigned tag object
If you want create a signed tag object then you can use with “-s”

To list the tags:

git tag -l

To show the tag message:

git show tag

To create a branch:

git branch branch_name

To switch your tree to a specific branch:

git checkout branch_name

To list the branches:

git branch

To revert back a revision:

git checkout revision_name

After you have finished implementing a new feature on a branch, you may want to merge the trunk with branch, in order to achieve this:

git merge [head]

Edit: git merge is added and a typo is fixed