次のようにするとします。
X
t
を作成(ブランチX
へ)X
タグt
はどうなりますか?ただそこに浮いているだけですか?それはゴミと見なされますか?
ブランチ自体を削除する前に、ブランチを指すすべてのタグを削除する必要がありますか?
From Git Basics-Tagging :
Gitは2つの主なタイプのタグを使用します。軽量と注釈付きです。軽量タグは、変化しないブランチに非常に似ています–特定のコミットへの単なるポインタです。
タグtはどうなりますか?
コミットx
からブランチE
を作成し、そのコミットにタグt
をタグ付けしたとします。例えば。
x (branch)
|
V
A-----B------C------D------E
^
|
t (tag)
ブランチx
を削除すると、タグt
は何も起こりません。
git branch -D x
タグはまだコミットE
を指しています。
A-----B------C------D------E
^
|
t (tag)
それはゴミと見なされますか?
いいえ、コミットはタグt
によって参照されているためです。
コミットが削除された場合はどうなりますか?
コミットは削除しません。コミットへのポインタを削除すると、コミットが参照されなくなった場合、gitはいつかガベージコレクションを実行します(構成によって異なります)。
git gc
を参照
ブランチやタグなどの通常の参照をすべて削除した場合でも、コミットはしばらくの間reflogで参照され、それらにアクセスできます。ブランチを再作成し、タグを付けるか、チェリーピックなどを行います。
git reflog
を使用してreflogを表示できます。 gc.reflogExpireUnreachable
とgc.reflogExpire
もご覧ください
OPの質問の特定のシナリオではなく、タイトルの質問に対処します。削除されたコミットを指すgitタグはどうなりますか?
タグによって参照されたコミットをなんとかして削除した場合(その方法がわからない- RenéLinkの回答 を参照)、タグは無効なコミットへのポインタになります( .git/refs/tagsからタグを手動で編集してこれをテストできます)。
このような場合、git tag
の出力は次のようになります。
$ git tag
error: refs/tags/v1.0 does not point to a valid object!
v1.1
...etc
チェックアウトでもエラーが発生します。
$ git checkout v1.0
fatal: reference is not a tree: v1.0
それで、「削除されたコミットを参照するgitタグはどうなりますか?」という質問への回答です。なんでもない。 git tag -d <tag>
で削除するまで、無効な参照を指しているままです。
タグが作成されたブランチを削除しても、タグには影響しません。タグはそれがどこから作成されたかの参照を保持しません。
タグとブランチの詳細について知りたい場合は、次の質問を検討することをお勧めします: タグはブランチとどう違うのですか?ここでどちらを使うべきですか?