1. ホーム
  2. git

[解決済み] gitタグとは何か、タグの作成方法とgitリモートタグのチェックアウト方法

2022-03-15 04:05:40

質問

リモートgitタグをチェックアウトする際、以下のようなコマンドを使用します。

git checkout -b local_branch_name origin/remote_tag_name

このようなエラーが発生しました。

<ブロッククオート

error: pathspec origin/remote_tag_name は、git が知っているどのファイルにも一致しませんでした。

git tag コマンドを使用すると remote_tag_name が見つかります。

どのように解決するのですか?

まず、gitのタグとは何かということから説明します。

タグは、特定のラベルやマークを付けるために使用されます。 コミット を履歴に残します。
通常、リリースポイント(例:v1.0など)をマークするために使用されます。

<ブロッククオート

タグはブランチと似ているように見えるかもしれませんが タグは変更されません。 . それは 直接 を指定します。 特定のコミット は履歴に残り、明示的に更新されない限り変更されることはありません。


タグがローカルにリポジトリにないとチェックアウトできないので、まずは fetch をローカルリポジトリにコピーしてください。

まず、タグがローカルに存在することを確認するために、次のようにします。

# --all will fetch all the remotes.
# --tags will fetch all tags as well
$ git fetch --all --tags --prune

次に、このタグをチェックアウトするために

$ git checkout tags/<tag_name> -b <branch_name>

の代わりに origin を使用します。 tags/ の接頭辞が必要です。


このサンプルでは、バージョン1.0とバージョン1.1の2つのタグがありますが、以下のいずれかで確認することができます。

$ git checkout A  ...
$ git checkout version 1.0  ...
$ git checkout tags/version 1.0  ...

タグは与えられたコミットへのポインタに過ぎないので、上記はすべて同じことをします。


の元になります。 https://backlog.com/git-tutorial/img/post/stepup/capture_stepup4_1_1.png


すべてのタグのリストを見るには?

# list all tags
$ git tag

# list all tags with given pattern ex: v-
$ git tag --list 'v-*'


タグを作成するには?

タグを作成する方法は2つあります。

# lightweight tag 
$ git tag 

# annotated tag
$ git tag -a

この2つの違いは、注釈付きタグを作成する際に、gitのコミットと同じようにメタデータを追加できることです。
名前、電子メール、日付、コメント、署名

タグを削除するには?

ローカルタグを削除する

$ git tag -d <tag_name>
Deleted tag <tag_name> (was 000000)

存在しないGitタグを削除しようとすると、以下のエラーが表示されます。

$ git tag -d <tag_name>
error: tag '<tag_name>' not found.

リモートタグの削除

# Delete a tag from the server with push tags
$ git push --delete origin <tag name>

特定のタグをクローンする方法は?

指定されたタグの内容を取得するためには checkout コマンドを使用します。上で説明したように、タグは他のコミットメントと同じように扱えるので checkout で置き換え、SHA-1 を使用する代わりに、単純に タグ名

オプション1:

# Update the local git repo with the latest tags from all remotes
$ git fetch --all

# checkout the specific tag
$ git checkout tags/<tag> -b <branch>

オプション 2:

cloneコマンドを使用する

git は シャロークローン を追加することで --branch をcloneコマンドに追加すると、ブランチ名の代わりにタグ名を使用できます。Git は、指定された SHA-1 を関連するコミットに "translate" する方法を知っています。

# Clone a specific tag name using git clone 
$ git clone <url> --branch=<tag_name>

git clone --branch=

--branch はタグを受け取り、結果のリポジトリでそのコミットにおける HEAD をデタッチすることもできます。


タグをプッシュするには?

git push --tags

すべてのタグをプッシュする場合。

# Push all tags
$ git push --tags 

を使用することで refs/tags を指定するだけでなく <tagname> .

なぜ?

  • を使用することが推奨されています。 refs/tags タグがブランチと同じ名前になることがあり、単純な git push ではタグではなくブランチをプッシュしてしまうからです。

注釈付きタグと現在の履歴チェーンタグをプッシュするには、以下を使用します。

git push --follow-tags

このフラグ --follow-tags の両方をプッシュします。 コミット タグのみ の両方であること。

  • アノテーションタグ(ローカル/テンプビルドタグをスキップできるようにする)
  • 現在のブランチから到達可能なタグ(先祖)(履歴上に位置する)。

Git 2.4 からは、コンフィギュレーションで設定することができます。

$ git config --global push.followTags true


チートシート