Gitタグは現在のブランチにのみ適用されますか?


156

現在、複数のブランチを持つリポジトリを使用しています。

タグを作成すると、そのタグは当時の現在のブランチを参照しますか?

つまり、タグを作成するときはいつでも、目的のブランチに切り替えて、そのブランチ内のタグを指定し、その時点でタグがそのブランチを参照するようにする必要がありますか?

回答:


151

たとえば、タグを作成した場合

git tag v1.0

タグは、現在行っているブランチの最新のコミットを参照します。ブランチを変更して、そこでタグを作成できます。

タグ付け中に他のブランチを参照することもできます

git tag v1.0 name_of_other_branch

他のブランチの最新のコミットへのタグを作成します。

または、コミットのSHA1を直接参照することで、どのブランチに関係なく、タグをどこにでも置くことができます

git tag v1.0 <sha1>

201

CharlesBの回答helmbertの回答はどちらも役に立ちますが、理解するのにしばらく時間がかかりました。これを置く別の方法は次のとおりです。

  • タグがあるコミットへのポインタ、およびコミットは独立して枝の存在します
    • ことを理解することが重要であるタグは一切持っていない直接的な枝との関係を -彼らはしか識別コミット
      • そのコミットは、任意の数のブランチからポイントすることができます。つまり、何も含まない、任意の数のブランチの履歴の一部である可能性があります。
    • したがって、git show <tag>タグの詳細を確認するための実行には、ブランチへの参照は含まれず、タグが指すコミットのIDのみが含まれます。
      • (16進数で構成される40文字の文字列です)オブジェクト名またはSHA-1のID別名(IDがコミットコミットの内容を超えるハッシュある数字;例えば:。 6f6b5997506d48fc6267b0b60c3f0261b6afe7a2
  • 枝は間接的にのみ登場するます:
    • タグの作成時に、タグが指すコミット暗示することにより
      • タグのターゲットを指定しないと、デフォルトで現在のブランチの最新のコミット(別名HEAD)になります。例えば:
        • git tag v0.1.0 # tags HEAD of *current* branch
      • タグターゲットとしてブランチ名を指定すると、デフォルトでそのブランチの最新のコミットになります。例えば:
        • git tag v0.1.0 develop # tags HEAD of 'develop' branch
      • (他の人が指摘したように、タグのターゲットとしてコミットIDを明示的に指定することもできます。)
    • 使用する場合 git describeして現在のブランチを説明する:
      • git describe [--tags] 最新の[おそらく軽量]タグ以降のコミットの観点から現在のブランチを説明します このブランチの履歴におけるます。
      • したがって、によって参照されるタグgit describeは、最近作成されたタグ全体を反映していない場合があります

したがって、特定のタグ(たとえば、v0.1.0)の場合、(そのソースの)実際のビルドに含まれる実際のソースを知るには、ビルドが基づいているブランチを知る必要がありますよね?つまり、特定のコミットでは、ブランチごとに異なる子孫が存在する可能性があります。
Hawkeye Parker

2
@HawkeyeParker:私はこれに没頭することはもうありませんが、タグは特定のコミット(複数のブランチの一部である可能性があります)を識別し、そこから調査できるため、ブランチを知る必要はありません。
mklement0 2018

しかし、git show [tagname]を実行すると、AuthorとDateの上にブランチ名が表示されます。これは、「git show <tag>を実行してタグの詳細を参照すると、ブランチへの参照が含まれていない」と矛盾する
Brad Thomas

39

タグは特定のコミットを参照し、ブランチは履歴の最後のコミットへの移動参照であるため、タグとブランチは完全に無関係です。ブランチは進み、タグは残ります。

したがって、コミットにタグを付けるとき、タグ付けしたいもののSHA1を提供した場合、gitはどのコミットまたはブランチがチェックアウトされているかを気にしません。

ブランチを参照してタグを付けることもでき(ブランチの先端にタグが付けられます)、後でブランチの先端が別の場所にある(git reset --hardたとえば)と言ったり、ブランチを削除したりできます。ただし、作成したタグは移動しません。


17
言い換えれば、タグは醜いgitハッシュのちょうどいい名前です。タグ(およびハッシュ)は、存在するブランチに関係なく存在します。
C-Otto

8

ただ電話するとき git tag <TAGNAME>追加のパラメーターなしで、Gitは現在のHEAD(つまり、現在のブランチのHEAD)から新しいタグを作成します。このブランチに追加のコミットを追加すると、ブランチHEADはそれらの新しいコミットに追いつきますが、タグは常に同じコミットを参照します。

呼び出すときにgit tag <TAGNAME> <COMMIT>、タグの作成に使用するコミットを指定することもできます。

いずれにしても、タグはまだ特定のコミット(ブランチではない)への単なる「ポインタ」です。


6

過去のコミットのタグを作成できます:

git tag [tag_name] [reference_of_commit]

例えば:

git tag v1.0 5fcdb03

1

現在のブランチにタグを付ける場合は、次のように入力します。

git tag <tag>

そしてブランチをプッシュします:

git push origin --tags

0

release/yourbranchなどのようなブランチからタグを作成する場合は、次のようなものを使用する必要があります

git tag YOUR_TAG_VERSION_OR_NAME origin/release/yourbranch

適切なタグを作成した後、タグをリモートにプッシュしたい場合は、コマンドを使用します

git push origin YOUR_TAG_VERSION_OR_NAME
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.