この記事では、Gitにおけるタグ管理の基本について解説します。重要なコミットについてはタグをつけることができます。タグの確認方法、軽量タグと注釈付きタグの作成手順、タグの注釈やコミット情報の確認方法、タグの削除手順、リモートリポジトリへのタグの共有方法を詳しく説明します。これにより、Gitタグ管理の基本を理解し、効率的なバージョン管理を実現するための知識を身につけることができます。
目次
タグの一覧表示 (git tag)
git tagで現在のリポジトリにあるタグを確認できます。
1 2 3 4 |
~/LocalRepos/TestProject (master) $ git tag tag1 tag2 v1 |
パターンでのタグ検索 (git tag -l <パターン>)
git tag -l <パターン>でパターンを用いてタグを検索できます。
1 2 3 |
~/LocalRepos/TestProject (master) $ git tag -l '*1' tag1 v1 |
軽量版のタグの追加 (git tag <タグ名>)
git tagはタグ名とコミットを指定して注釈のない単純な軽量版のタグを追加できます。
コミットのハッシュ値を指定してするとそのコミットに軽量版のタグを追加できます。
1 2 3 4 5 |
~/LocalRepos/TestProject (master) $ git tag 'tag1' 27febe1 ~/LocalRepos/TestProject (master) $ git log --oneline --all --graph --decorate * 4bf2224 (HEAD -> master) 3 commit * 27febe1 (tag: tag1) 2 commit * 8cb20bd 1 commit |
とくにコミットを指定しない場合は最新のコミットにタグを追加できます。
1 2 3 4 5 |
~/LocalRepos/TestProject (master) $ git tag 'tag2' ~/LocalRepos/TestProject (master) $ git log --oneline --all --graph --decorate * 4bf2224 (HEAD -> master, tag: tag2) 3 commit * 27febe1 (tag: tag1) 2 commit * 8cb20bd 1 commit |
注釈付きのタグの追加 (git tag -a)
-mオプションを利用すると一行の注釈をつけることができます。-mオプションを使わなかった場合はエディタが開いて、複数行の注釈を入れることができます。
1 |
~/LocalRepos/TestProject (master) $ git tag -m 'tag message' -a 'first_commit' 8cb20bd |
tagの注釈は-vオプションでタグを指定することで確認することができます。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
~/LocalRepos/TestProject (master) $ git log --oneline --tags --graph --decorate * 23bfbd6 (tag: v1) 4 commit * 4bf2224 (tag: tag2) 3 commit * 27febe1 (tag: tag1) 2 commit * 8cb20bd (tag: first_commit) 1 commit ~/LocalRepos/TestProject (master) $ git tag -v first_commit object 8cb20bd80ddf8079331e7c7dfa198726e48bce93 type commit tag first_commit tagger ubuntu <[email protected]> 1712456232 +0900 tag message error: no signature found |
タグが付いたコミットの情報を表示 (git show <タグ名>)
git showを利用することでタグとコミットの情報を確認することもできます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
~/LocalRepos/TestProject (master) $ git show first_commit tag first_commit Tagger: ubuntu <[email protected]> Date: Sun Apr 7 11:17:12 2024 +0900 tag message commit 8cb20bd80ddf8079331e7c7dfa198726e48bce93 (tag: first_commit) Author: ubuntu <[email protected]> Date: Sun Apr 7 10:49:05 2024 +0900 1 commit diff --git a/file1.txt b/file1.txt new file mode 100644 index 0000000..e69de29 |
タグの削除 (git tag -d <タグ名>)
git tag -dでタグを削除できます。
1 2 3 4 5 6 7 8 9 10 11 12 |
~/LocalRepos/TestProject (master) $ git log --all --oneline --graph --decorate * 858b2eb (HEAD -> master, origin/master) 3 commit * 1b025eb (tag: tag1) 2 commit * 3035014 1 commit ~/LocalRepos/TestProject (master) $ ~/LocalRepos/TestProject (master) $ git tag -d tag1 Deleted tag 'tag1' (was 1b025eb) ~/LocalRepos/TestProject (master) $ ~/LocalRepos/TestProject (master) $ git log --all --oneline --graph --decorate * 858b2eb (HEAD -> master, origin/master) 3 commit * 1b025eb 2 commit * 3035014 1 commit |
タグの共有 (git push origin <タグ名>)
タグを共有するにはgit push origin <タグ名>のように指定します。
まず、リモートリポジトリのコミット履歴は以下のようになっています。
1 2 3 4 |
~/RemoteRepos/TestProject.git (BARE:master) $ git log --oneline --all --graph --decorate * 858b2eb (HEAD -> master) 3 commit * 1b025eb 2 commit * 3035014 1 commit |
ローカルリポジトリに2番目のコミット履歴(1b025eb)にtag1というタグをつけて、プッシュを行います。
1 2 3 4 |
~/LocalRepos/TestProject (master) $ git push origin tag1 Total 0 (delta 0), reused 0 (delta 0), pack-reused 0 To /home/ubuntu/RemoteRepos/TestProject.git * [new tag] tag1 -> tag1 |
そうすると、リモートリポジトリ側でもタグが反映させることができます。
1 2 3 4 |
~/RemoteRepos/TestProject.git (BARE:master) $ git log --oneline --all --graph --decorate * 858b2eb (HEAD -> master) 3 commit * 1b025eb (tag: tag1) 2 commit * 3035014 1 commit |
リモートリポジトリのタグを削除するにはgit push -d origin tag <タグ名>のように指定することで削除できます。
1 2 3 |
~/LocalRepos/TestProject (master) $ git push -d origin tag tag1 To /home/ubuntu/RemoteRepos/TestProject.git - [deleted] tag1 |
成功するとリモートリポジトリ側でタグが削除されます。
1 2 3 4 |
~/RemoteRepos/TestProject.git (BARE:master) $ git log --oneline --all --graph --decorate * 858b2eb (HEAD -> master) 3 commit * 1b025eb 2 commit * 3035014 1 commit |
すべてのタグを送りたい場合はgit push --tagsで送ることができます。
1 2 3 4 5 |
~/LocalRepos/TestProject (master) $ git push --tags Total 0 (delta 0), reused 0 (delta 0), pack-reused 0 To /home/ubuntu/RemoteRepos/TestProject.git * [new tag] tag1 -> tag1 * [new tag] tag2 -> tag2 |
ブランチを作成してタグのチェックアウト (git checkout -b <ブランチ名> <タグ名>)
git checkout -b <ブランチ名> <タグ名>でブランチを作成してタグのチェックアウトを行うことができます。
特定のタグから分岐を作成したいときに利用できます。
1 2 3 4 5 6 |
~/LocalRepos/TestProject (master) $ git checkout -b b1 tag1 Switched to a new branch 'b1' ~/LocalRepos/TestProject (b1) $ git log --all --oneline --graph --decorate * 858b2eb (origin/master, master) 3 commit * 1b025eb (HEAD -> b1, tag: tag1) 2 commit * 3035014 1 commit |
また、-b <ブランチ名>オプションを利用しない場合はコミットのハッシュ値を指定したようにDetached HEAD状態でチェックアウトが行われます。
特に分岐を作成する必要がない場合はこちらで十分でしょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
~/LocalRepos/TestProject (master) $ git checkout tag1 Note: switching to 'tag1'. 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 switching back to a branch. If you want to create a new branch to retain commits you create, you may do so (now or later) by using -c with the switch command. Example: git switch -c <new-branch-name> Or undo this operation with: git switch - Turn off this advice by setting config variable advice.detachedHead to false HEAD is now at 1b025eb 2 commit ~/LocalRepos/TestProject ((tag1)) $ git log --all --oneline --graph --decorate * 858b2eb (origin/master, master) 3 commit * 1b025eb (HEAD, tag: tag1) 2 commit * 3035014 1 commit |
ただし、この例で再びmasterブランチに何かをコミットを行う場合にはブランチをチェックアウトして戻らなければいけないでしょう。
1 2 3 4 5 6 7 8 |
~/LocalRepos/TestProject ((tag1)) $ git checkout master Previous HEAD position was 1b025eb 2 commit Switched to branch 'master' Your branch is up to date with 'origin/master'. ~/LocalRepos/TestProject (master) $ git log --all --oneline --graph --decorate * 858b2eb (HEAD -> master, origin/master) 3 commit * 1b025eb (tag: tag1) 2 commit * 3035014 1 commit |