1389

今日、私はあるプロジェクトのログを調べていて、少し前にタグ名を間違えたことに気付きました。タグの名前を変更する方法はありますか? Google は有用なものを見つけていません。

タグ付けされたバージョンをチェックアウトして、新しいタグを作成できることに気付きました。しかし、それは正しくないタグ オブジェクトを作成しているようです。一つには、

git tag -l

は、他のすべてのタグと比較して順不同でリストします。それが重要かどうかはわかりませんが、新しいタグ オブジェクトは私が望んでいたものとは違うと思います。タグ名がドキュメントと一致することだけを本当に気にかけているので、それを受け入れることができますが、これを行う正しい方法があると仮定して、「正しく」行うことをお勧めします。

4

11 に答える 11

2339

タグの名前を次のように変更する方法はold次のnewとおりです。

git tag new old
git tag -d old
git push origin new :old

pushコマンドのコロンは、リモートリポジトリからタグを削除します。これを行わないと、プルしたときにGitがマシン上に古いタグを作成します。最後に、他のユーザーが削除されたタグを削除していることを確認してください。次のコマンドを実行するように彼ら(同僚)に伝えてください。

git pull --prune --tags

注釈付きタグを変更する場合は、削除しようとしている古い注釈付きタグオブジェクトではなく、新しいタグ名が基になるコミットを参照していることを確認する必要があることに注意してください。したがって、git tag -a new old^{} 代わりに使用してくださいgit tag new old(これは、注釈付きタグはオブジェクトであり、軽量タグはオブジェクトではないためです。この回答で詳細を確認してください)。

于 2011-04-19T16:51:17.803 に答える
317

元の質問は、タグの名前を変更する方法でした。これは簡単です。最初に NEW を OLD: のエイリアスとして作成し、git tag NEW OLD次に OLD: を削除しますgit tag -d OLD

「Git の方法」と (不) 正気に関する引用は、タグ名を保持することについて話しているため、根拠がありませんが、別のリポジトリ状態を参照するようにします。

于 2009-12-09T13:34:06.227 に答える
127

他の回答に加えて:

最初に、元のコミットを指す古いタグ名のエイリアスを作成する必要があります。

git tag new old^{}

次に、古いものをローカルで削除する必要があります。

git tag -d old

次に、リモート ロケーションのタグを削除します。

# Check your remote sources:
git remote -v
# The argument (3rd) is your remote location,
# the one you can see with `git remote`. In this example: `origin`
git push origin :refs/tags/old

最後に、新しいタグをリモート ロケーションに追加する必要があります。これを行うまで、新しいタグは追加されません:

git push origin --tags

離れた場所ごとにこれを繰り返します。

Git タグの変更がパッケージの消費者に及ぼす影響に注意してください。

于 2013-04-27T11:42:55.520 に答える
30

この wiki ページには、この興味深いワンライナーがあり、複数の refをプッシュできることを思い出させてくれます。

git push origin refs/tags/<old-tag>:refs/tags/<new-tag> :refs/tags/<old-tag> && git tag -d <old-tag>

他のクローン作成者に依頼するgit pull --prune --tags

したがって、アイデアはプッシュすることです:

  • <new-tag>によって参照されるすべてのコミットに対して<old-tag>: refs/tags/<old-tag>:refs/tags/<new-tag>
  • の削除<old-tag>::refs/tags/<old-tag>

例として、「git リポジトリ内のタグの命名規則を変更しますか?」を参照してください。

于 2014-06-16T14:20:22.607 に答える
27

公開されている場合は、削除することはできません(つまり、タール羽の刑に処せられるリスクがあります)。「Gitの方法」は次のことを行います。

正気なこと。失敗したことを認めて、別の名前を使用してください。他の人はすでに1つのタグ名を見たことがあり、同じ名前を保持している場合、2人が両方とも「バージョンX」を持っている状況にあるかもしれませんが、実際には異なる「X」を持っています。だから、それを「X.1」と呼んで、それで終わりです。

または、

非常識なこと。他の人がすでに古いバージョンを見たとしても、あなたは本当に新しいバージョンを「X」と呼びたいです。したがって、古いものをまだ公開していないかのように、もう一度git-tag-fを使用します。

それはとても正気ではありません:

Gitは、ユーザーの背後にあるタグを変更しません(また、変更すべきではありません)。したがって、誰かがすでに古いタグを取得している場合、ツリーでgit-pullを実行しても、古いタグを上書きするだけではいけません。

誰かがあなたからリリースタグを受け取った場合、自分のタグを更新してその人のタグを変更することはできません。これはセキュリティ上の大きな問題であり、人々は自分のタグ名を信頼できなければなりません。あなたが本当に狂ったことをしたいのなら、あなたはただそれに気を配り、あなたが台無しにしたことを人々に伝える必要があります。

マニュアルページのすべての礼儀。

于 2009-06-22T18:10:32.193 に答える
6

冒険好きな方は、コマンド 1 つで実行できます。

mv .git/refs/tags/OLD .git/refs/tags/NEW
于 2012-07-13T09:24:39.627 に答える
3

1 つのgit pushコマンドで、古いタグ/ブランチを新しい名前に複製し、古いタグを削除することで、チェックアウトせずにリモート タグの名前を変更することもできます。

リモートタグリネーム・リモート分岐→タグ変換:(注意:refs/tags/:)

git push <remote_name> <old_branch_or_tag>:refs/tags/<new_tag> :<old_branch_or_tag>

リモートブランチリネーム/リモートタグ→ブランチ変換: (注意: :refs/heads/)

git push <remote_name> <old_branch_or_tag>:refs/heads/<new_branch> :<old_branch_or_tag>

リモートタグの名前を変更する出力:

D:\git.repo>git push gitlab App%2012.1%20v12.1.0.23:refs/tags/App_12.1_v12.1.0.23 :App%2012.1%20v12.1.0.23

Total 0 (delta 0), reused 0 (delta 0)
To https://gitlab.server/project/repository.git
 - [deleted]               App%2012.1%20v12.1.0.23
 * [new tag]               App%2012.1%20v12.1.0.23 -> App_12.1_v12.1.0.23
于 2017-02-17T13:41:37.950 に答える