Like most VCSs, Git has the ability to tag specific points in history as being important. Generally, people use this functionality to mark release points (v1.0, and so on). Git uses two main types of tags: lightweight and annotated.
However, it is highly recommended to use the annotated tags, because they are stored as full objects in the Git database. They’re checksummed; contain the tagger name, e-mail, and date; have a tagging message; and can be signed and verified with GNU Privacy Guard (GPG).
- Create a tag
Creating an annotated tag in Git is simple. The easiest way is to specify -a when you run the tag command:
$ git tag -a v1.0 -m 'first release' $ git tag v1.0
The -m specifies a tagging message, which is stored with the tag. If you don’t specify a message for an annotated tag,
Git launches your editor so you can type it in.
- Show a tag
You can see the tag data along with the commit that was tagged by using the git show command.
$git show v1.0 tag v1.0 Tagger: ewagheg <firstname.lastname@example.org> Date: Tue May 13 10:15:48 2014 -0400 first release commit b46d1aab653e27d7104638582233de02d23cd55f Author: ewagheg <email@example.com> Date: Tue May 13 10:15:24 2014 -0400 first release diff --git a/haha.txt b/haha.txt new file mode 100644 index 0000000..5d28dfc --- /dev/null +++ b/haha.txt @@ -0,0 +1,2 @@ +version 1.0 +
- Checkout a tag
You can check out a specific version of the tool by using the command “git checkout v1.0”.
- Delete a tag
You can delete a tag any time if that version is discarded by using the command “git tag –d v1.0”.
$git tag -d v1.0 Deleted tag 'v1.0' (was 716206f) $git tag v2.0
The following example shows how to add a tag to the tool, and how to switch between different versions of the tool.
!!!NOTE: Commit first before adding the tag to the tool.
$git commit -m "First release" [master (root-commit) 132abfe] First release 1 file changed, 3 insertions(+) create mode 100644 test.txt $git tag -a v1.0 -m "the first tag" $git tag v1.0 $git show commit 132abfe4e4ce8f8cefaf2ad9bb1f39c59d5f2b7b Author: ewagheg <firstname.lastname@example.org> Date: Tue May 13 10:37:45 2014 -0400 First release diff --git a/test.txt b/test.txt new file mode 100644 index 0000000..7c2ac43 --- /dev/null +++ b/test.txt @@ -0,0 +1,3 @@ +This is a test file for git tag. + +First release.
By doing the above procedure, a tag has been added to the tool. Let’s do some modification for the tool and then create another tag for it.
$git commit -m "Second release" [master 3669b09] Second release 1 file changed, 3 insertions(+) $git tag -a v2.0 -m "the second tag" $git tag v1.0 v2.0 $git show v2.0 tag v2.0 Tagger: ewagheg <email@example.com> Date: Tue May 13 10:43:30 2014 -0400 the second tag commit 3669b097e09991b6dde1cd66b0e29dd7654755eb Author: ewagheg <firstname.lastname@example.org> Date: Tue May 13 10:43:10 2014 -0400 Second release diff --git a/test.txt b/test.txt index 7c2ac43..0274106 100644 --- a/test.txt +++ b/test.txt @@ -1,3 +1,6 @@ This is a test file for git tag. First release. + +Modifications! +Second release.
To see the current version of the tool, use “git describe”.
$git describe v2.0
Now, let’s check out the first version of the tool.
$git checkout v1.0 Note: checking out 'v1.0'. You are in 'detached HEAD' state. You can look around, make experimental changes and commit them, and you can discard any commits you make in this state without impacting any branches by performing another checkout. If you want to create a new branch to retain commits you create, you may do so (now or later) by using -b with the checkout command again. Example: git checkout -b new_branch_name HEAD is now at 132abfe... First release $git describe v1.0 $git status # HEAD detached at v1.0 nothing to commit, working directory clean
Now the tool has been switched to the version v1.0. Let’s switch back to version 2.0.
$git checkout v2.0 Previous HEAD position was 132abfe... First release HEAD is now at 3669b09... Second release $git describe v2.0 $git status # HEAD detached at v2.0 nothing to commit, working directory clean
For more information about Git, please find the free online book Git Pro here: