web-dev-qa-db-ja.com

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

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

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

つまり、タグを作成するたびに、目的のブランチに切り替えて、そのブランチ内のタグを切り替えて、その時点でタグがそのブランチを参照する必要がありますか?

123
Gerardo

たとえば、タグを作成する場合.

git tag v1.0

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

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

git tag v1.0 name_of_other_branch

これにより、他のブランチの最新のコミットへのタグが作成されます。

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

git tag v1.0 <sha1>
123
Kalle Pokki

CharlesBの答えhelmbertの答え は両方とも役に立ちますが、それらを理解するにはしばらく時間がかかりました。これを別の方法で示します。

  • タグコミットへのポインターであり、コミットはbranchs とは独立して存在します。
    • タグには、ブランチとのdirect関係はないことを理解することが重要です/-commit.
      • そのコミットは、任意の数のブランチから指すことができます-つまり、任意の数のブランチの履歴の一部にすることができます-なしを含む。
    • したがって、git show <tag>を実行してタグの詳細を表示するには、ブランチへの参照は含まれず、タグが指すコミットのIDのみが含まれます。
      • (コミットID(別名オブジェクト名またはSHA-1 ID)は、コミットの内容をハッシュする16進数で構成される40文字の文字列です。例:6f6b5997506d48fc6267b0b60c3f0261b6afe7a2
  • ブランチは、indirectly :のみが機能します。
    • creatingタグのとき、implyingによってコミットタグが指す/:
      • タグのターゲットを指定しないと、現在のブランチの最新のコミット(別名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によって参照されるタグは、最後に作成されたタグoverallを反映しない場合があります。
153
mklement0

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

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

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

30
CharlesB

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

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

とにかく、タグは特定のコミット(ブランチではなく)への単なる「ポインター」です。

5
helmbert

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

git tag [tag_name] [reference_of_commit]

例えば:

git tag v1.0 5fcdb03
3
Sana Hameed