Gitリポジトリからすべてのタグを削除する


224

Gitリポジトリからすべてのタグを削除したい。どうやってやるの?

ローカルでのgit tag -d tagname削除タグの使用tagname、およびgit push --tagsgitプロバイダーでのタグの更新の使用。

私は試した:

git tag -d *

しかし、それ*は現在のディレクトリからのファイルを意味します。

$ git tag -d *
error: tag 'file1' not found.
error: tag 'file2' not found.
...

タグがたくさんあり、それらをすべて削除したいとします。

回答:


419
git tag | xargs git tag -d

すべてをパイプするLinuxの哲学を使用するだけです。Windowsでは、同じコマンドでgit bashを使用します。


136
ありがとう。このコマンドは、ローカルタグを削除します。以前git tag -l | xargs -n 1 git push --delete originはリモートから削除していました。
IonicăBizău

7
そしてWindowsでは?
CodeManX 2015

7
@CoDEmanX Windowsでは、同じコマンドでgit bashを使用する必要があります。
inf3rno 2015

2
リモートタグは削除されません。また、何千ものタグの場合は非常に遅くなります。
エイドリアンベイカー

1
'xargs'はWindows 10の内部または外部コマンドとして認識されません
Gulzar

207

(ローカルタグを削除する前に)リモートタグを削除するには、次のようにします。

git tag -l | xargs -n 1 git push --delete origin

ローカルコピーを削除します。

git tag | xargs git tag -d

数十のタグに対してリモート削除は非常に遅いです。
ffxsam 2017年

5
多くのリモートタグがある場合、この回答ははるかに速くなります:stackoverflow.com/a/34395864/747044
adriaan

この回答のコマンドの順序は、ローカルのみのタグがないことを前提としています。
Acumenus

これは遅すぎるので、以下のソリューションの方が優れています。
ルートフール

コミットのパスフレーズを入力する必要がある場合は、タグごとにパスフレーズが必要です。他のソリューションの方が優れています。
KAP

56

1つのコマンドですべてのタグをプッシュ削除する方が効率的です。特に数百人いる場合は。

Windows以外の適切なシェルで、すべてのリモートタグを削除します。

git tag | xargs -L 1 | xargs git push origin --delete

次に、すべてのローカルタグを削除します。

git tag | xargs -L 1 | xargs git tag --delete

'タグ名にaが含まれていない限り、これで問題ありません。そのためには、次のコマンドで問題ありません。

git tag | xargs -I{} echo '"{}"' | tr \\n \\0 | xargs --null git push origin --delete
git tag | xargs -I{} echo '"{}"' | tr \\n \\0 | xargs --null git tag --delete

行のリストを取得し、それらを引用符で囲み、それらを1行にして、その行をコマンドに渡す他の方法が存在する可能性があります。これを考慮すると、猫のスキニング環境はすべて究極のものになります。


3
私は数千のタグを持っていましたが、リモートのクラウドリポジトリから1つずつ削除するのに数日かかっていましたが、これで解決しました。
エイドリアンベイカー

何をしxargs -L 1ますか?
ymett

-L max-lines --max-lines [= max-lines] -l [max-lines]コマンドラインごとに最大max-linesの空白以外の入力行を使用します。'-l'の場合、省略した場合、max-linesのデフォルトは1です。'-L'の場合、引数は必須です。末尾の空白は、行をカウントする目的で、入力行を次の入力行に論理的に継続させます。「-x」を意味します。このオプションの '-l'形式は廃止され、POSIX準拠の '-L'オプションが優先されます。 gnu.org/software/findutils/manual/html_node/find_html/...
リチャード・A Quadling

@RichardAQuadlingわかりましたが、それは答えにどのような影響を与えますか?git tag1行に1つずつタグを返し、1行にxargs -L 11つ出力するので、それは何のためにあるのでしょうか。
ymett

うーん。この文脈では一見何もない!物事を少し遅くする以外に!
リチャードA Quadling

24

PowerShellを使用しているWindowsユーザーの場合:

git tag | foreach-object -process { git tag -d $_ }

これにより、返されgit taggit tag -d各行に対して実行することにより、によって返されたすべてのタグが削除されます。


23

リモートからタグを削除する方法が欠落していたステファンの回答に追加。Windows PowerShellでは、これを実行して、最初にリモートタグを削除し、次にローカルタグを削除できます。

git tag | foreach-object -process { git push origin --delete $_ }
git tag | foreach-object -process { git tag -d $_ }  

19

ローカルリポジトリにタグがない場合は、ローカルリポジトリに移動せずにリモートタグを削除できます。

git ls-remote --tags --refs origin | cut -f2 | xargs git push origin --delete

「origin」をリモートハンドラー名に置き換えることを忘れないでください。


優れた!これにより、すべてが一度に削除されました。もう1つのコマンドは、2秒ごとに1つ削除すること
でした


6

次のものも使用できます。

git tag -d $(git tag)

数千のように多くのタグがある場合、これは機能しません
DixonD

この場合、次のように使用できます:git tag -d $(git tag | head -n 999)x回実行
ViZeke

1

これらのオプションはすべてLinuxでのみ機能するため、これを処理する必要がある人にとっては、次のWindowsの同等機能があります。

FOR /F usebackq %t IN (`git tag`) DO @git tag --delete %t

1

プレフィックスの付いたタグを削除する必要があります

たとえば、タグv0.0.1、v0.0.2、v0.0.3、v0.0.4、v0.0.5を削除する必要があります

git tag -d $(git tag -l "v0.0.*")

接頭辞付きのすべてのタグをリストするには

git tag -l "v0.0.*"

タグを削除するには

git tag -d $tag_names

それが最初のステートメントが機能する方法です


素早く、シンプルで効果的。お疲れ様でした!
VedranMandić

0

Powershell v7は、削除する必要がある上流(起点)タグが多数ある場合に、並列foreachをサポートします。

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