2016-09-30 12 views
0

gitのタグは、単純に削除してから再タグ付けすることで、あるコミットから別のコミットに移動することができます。例えばgitでタグの完全な履歴を表示するには?

git tag -m "Version 1.0" v1.0 abcd123 
git push --tags 
git tag -d v1.0 
git tag -m "Corrected version 1.0" v1.0 1234abc 
git push --tags 

どのように私は、特定のタグの全体の歴史を見ていますか? (言い換えれば、その名前のタグが作成/削除され、それぞれのタグがコミットされたときはいつでも)

すべてのタグの履歴はどうやって確認できますか?

答えて

3

また、力によって移動することができる。

git tag -f ... 

、次いで力に押さ。

特定のタグの履歴全体を確認するにはどうすればよいですか? (言い換えれば、名前を持つタグが作成/削除され、それぞれが何を指示するか)

一般に、あなたはできません。

タグを強制的に移動して強制的に押してタグのreflogを保持する場合、reflogエントリが期限切れになるまでタグのreflogから以前の値を取得できます。ただし、参照(任意の参照)を削除すると、reflogが削除されます。

注釈付きタグは、リポジトリ内のオブジェクト(参照自体に加えて)を使用します。参照を削除すると、注釈付きタグオブジェクトへの外部タグ名の参照のみが削除されます。基本オブジェクト自体が削除されていない限り、IDでアクセスできます。しかし、参照されていないオブジェクトとしては、通常のガベージコレクションルールの対象です。追加の参照(通常、別の注釈付きタグの別のタグ名)が元の注釈付きタグオブジェクトに到達可能な状態を維持する場合に限り、リポジトリに残ることが保証されます。

(ツリーオブジェクトがタグオブジェクトを指すことができない根本的な理由はないので、古い注釈付きタグを保持するツリーを指すコミットオブジェクトを持つことは可能ですが、Gitはこれを行うために構築されていません。そのようなものを構築するためのツールはありません。git fsckはそれらを誤ったものとみなす可能性があります。理論的にはこれはもっと理論的なことです。理論的には、「古いタグ」と「タグ履歴」を特別なコミットおそらくrefs/tagarchive/のような新しい参照名空間を指しているかもしれません。少なくとも1つのGit配管コマンドと複数のスクリプトが書かれていれば、おそらく指し示されています。 、いずれかです。)

+0

これは素晴らしい答えですが、私はそれをどのように適用するかはわかりません。私はgitの内部構造のいくつかについて十分に精通していません。 「基礎となるオブジェクト自体が削除されていない限り、IDでアクセスできます」 - 参照されていないオブジェクトをリストするにはどうすればよいですか?どのタグがタグであるかをどのようにして知ることができますか?それぞれの特定のタグをどのように伝えますか? –

+0

「彼らがどのように役立つかは不明だ」 - 私にとっては非常に貴重なようだ。タグはリリースをマークするためによく使用されます。リビジョン履歴にレコードを残すことなくコードを変更することは不可能であるように(まあ、ちょっと - 私は変更を強制することについて知っています)、レコードを残さずにタグを変更することは不可能です。この機能が実際に存在しない場合は、レコードなしで変更するのがはるかに難しいため、リリースをマークするタグの代わりに(またはタグに加えて)コミットメッセージを使用して開始します。 –

+0

'git fsck'(https://www.kernel。org/pub/software/scm/git/docs/git-fsck.html)は、タグを含む参照されていないオブジェクトを見つけることができます。 http://stackoverflow.com/q/36621730/1256452も参照してください。有用性については、タグを変更したり削除したりすることは想定されていません。タグのようなものです。 Linus Torvald氏の取り組みについては、https://www.kernel.org/pub/software/scm/git/docs/git-tag.html#_on_re_taggingを参照してください。 @ torek、正確には – torek

関連する問題