web-dev-qa-db-ja.com

リモートタグを削除する方法

すでにプッシュされているGitタグをどのように削除しますか?

2717
markdorison

あなただけのリモートタグ名への '空の'参照をプッシュする必要があります。

git Push Origin :tagname

もっと具体的に言うと、--deleteオプション(gitのバージョンが1.8.0より古い場合は-d)を使います。

git Push --delete Origin tagname

Gitにはタグの名前空間とブランチの名前空間があるので、ブランチとタグに同じ名前を使うことができます。タグの代わりに誤ってブランチを削除できないようにしたい場合は、full refを指定してブランチを削除しないようにすることができます。

git Push Origin :refs/tags/tagname

ローカルタグも削除する必要がある場合は、次のコマンドを使用してください。

git tag --delete tagname

バックグラウンド

ブランチ、タグ、またはその他の参照をリモートリポジトリにプッシュするには、「どのリポジトリ、どのソース、どの宛先か」を指定する必要があります。

git Push remote-repo source-ref:destination-ref

マスターブランチをOriginのマスターブランチにプッシュする実際の例は、次のとおりです。

git Push Origin refs/heads/master:refs/heads/master

これはデフォルトパスのため、以下のように短くすることができます。

git Push Origin master:master

タグは同じように機能します。

git Push Origin refs/tags/release-1.0:refs/tags/release-1.0

これは以下のように短縮することもできます。

git Push Origin release-1.0:release-1.0

ソースのref(コロンの前の部分)を省略すると、宛先に 'nothing'がプッシュされ、リモート側のrefが削除されます。

4541
Adam Franco

もっと簡単な方法は

git Push --delete Origin YOUR_TAG_NAME

この場合、IMOの前にコロン構文を付けるのは少し変です

313
quexer

あなたが削除するためのリモートタグv0.1.0を持っていて、あなたのリモートがOriginであるならば、単純に:

git Push Origin :refs/tags/v0.1.0

ローカルでタグを削除する必要がある場合

git tag -d v0.1.0

削除のためのGitの変わった:構文の説明については Adam Franco の答え を参照してください。

180
Alex Dean

すべてのローカルタグを削除し、リモートタグのリストを取得する

git tag -l | xargs git tag -d
git fetch

すべてのリモートタグを削除する

git tag -l | xargs -n 1 git Push --delete Origin

ローカルタグを整理する

git tag -l | xargs git tag -d
96

リモートリポジトリからタグを削除するには

git Push --delete Origin TAGNAME

ローカルでタグを削除することもできます。

git tag -d TAGNAME
28
Andrea

あなたの端末から、これをしてください:

git fetch
git tags
git tag -d {tag-name}
git Push Origin :refs/tags/{tag-name}

今Github.comに行き、リフレッシュしなさい、それらは消える。

22
Mahmoud Zalt

リモートタグという名前のリモートブランチがある場合、これらのコマンドはあいまいになります。

git Push Origin :tagname
git Push --delete Origin tagname

そのため、タグを削除するにはこのコマンドを使用する必要があります。

git Push Origin :refs/tags/<tag>

これはブランチを削除するためのものです。

git Push Origin :refs/heads/<branch>

そうでない場合は、次のようなエラーが発生します。

error: dst refspec <tagname> matches more than one.
error: failed to Push some refs to '<repo>'
14

ローカルタグ「12345」を削除

git tag -d 12345

リモートタグ '12345'を削除します(例:GitHubバージョンも)

git Push Origin :refs/tags/12345

代替アプローチ

git Push --delete Origin tagName
git tag -d tagName

enter image description here

11
Lyes CHIOUKH

Gitリポジトリにrelease01というタグを作成した場合は、次のようにして自分のリポジトリからそれを削除します。

git tag -d release01 
git Push Origin :refs/tags/release01 

Mercurialリポジトリから削除するには:

hg tag --remove featurefoo

参照してください https://confluence.atlassian.com/pages/viewpage.action?pageId=282175551

9
MeganZhou

何千ものリモートタグに対して最大100倍速い方法

11,000以上のタグを削除する必要があるときにこれらの答えを読み終えた後、私はあなたがやけどをする時間がない限り、これらの方法に頼るかxargsが非常に長い時間がかかることを学びました。

苦労して、私は2つの ずっと より速い方法を見つけました。どちらの場合も、git tagまたはgit ls-remote --tagsで始めて、削除したいタグのリストをリモートで作成します。以下の例では、sorting_proccessing_etcを省略または置き換えることができます(greping、sorting、tailing、またはheading)( 例えば grep -P "my_regex" | sort | head -n -200 etc )。


この最初の方法はxargsを使用するよりはるかに速い、おそらく 20から100倍 そして一度に少なくとも数個の 1,000 タグで動作します。

git Push Origin $(< git tag | sorting_processing_etc \
| sed -e 's/^/:/' | paste -sd " ") #note exclude "<" for zsh

これはどのように作動しますか?通常の行区切りのタグのリストは、スペースで区切られた1行のタグに変換され、それぞれのタグの先頭には: soが付きます。 。 。

tag1   becomes
tag2   ======>  :tag1 :tag2 :tag3
tag3

このフォーマットタグと一緒にgit Pushを使用すると、 nothing が各リモート参照にプッシュされて消去されます(これをプッシュするための通常のフォーマットはlocal_ref_path:remote_ref_pathです)。

方法2は別の答えとして分類されています この同じページの他の場所に


これらの方法の両方の後で、おそらくあなたのローカルタグも削除したくなるでしょう。これははるかに速いので、xargsgit tag -dの使用に戻ることができますが、これで十分です。

git tag | sorting_processing_etc | xargs -L 1 git tag -d

またはリモート削除に似ています。

git tag -d $(< git tag | sorting_processing_etc | paste -sd " ")
7
TonyH

他の回答ではこれを達成する方法を指摘していますが、これはリモートリポジトリであるため、結果に注意する必要があります。

On Retagging セクションのgit tagのmanページには、リモートリポジトリの他のユーザに変更を丁寧に知らせる方法についての良い説明があります。彼らは他の人があなたの変更をどのように受けるべきかを伝えるための便利なアナウンステンプレートさえ与えます。

6
Richard Venable

私はパターンにマッチするものを除いてすべてのタグを削除したかったので、最後の数ヶ月のプロダクションタグを除くすべてを削除することができました。

すべてのリモートタグを削除し、削除から表現を除外 /

git tag -l | grep -P '^(?!Production-2017-0[89])' | xargs -n 1 git Push --delete Origin

すべてのローカルタグを削除し、削除から表現を除外 /

git tag -l | grep -P '^(?!Production-2017-0[89])' | xargs git tag -d
5
Lucent Fox

@CubanXが示唆したように、私はこの答えを私のオリジナルのものと分けました:

これはxargsより数倍速い方法で、微調整をするともっと大きくなります。これは Github API 、個人用アクセストークンを使用し、ユーティリティ parallel を利用します。

git tag | sorting_processing_etc | parallel --jobs 2 curl -i -X DELETE \ 
https://api.github.com/repos/My_Account/my_repo/git/refs/tags/{} -H 
\"authorization: token GIT_OAUTH_OR_PERSONAL_KEY_HERE\"  \
-H \"cache-control: no-cache\"`

parallel には多くの操作モードがありますが、一般的にあなたがそれに与えるコマンドを並列化しながらプロセスの数に制限を設定することができます。 --jobs 2パラメータを変更してより高速な操作を可能にすることはできますが、Githubの レート制限 に問題がありましたが、現在は5000/hrですが、文書化されていない短期制限もあります。


その後、おそらくあなたのローカルタグも削除したくなるでしょう。これははるかに速いので、xargsgit tag -dの使用に戻ることができますが、これで十分です。

git tag | sorting_processing_etc | xargs -L 1 git tag -d
5
TonyH

xargsが既に行っていることには、多くの作業が必要です。このスレッドを振り返ってみると、あなたが経験したxargsの遅さは、本来の答えがxargs -n 1を実際に必要としていないときに使用していたためです。

xargsが自動的に最大コマンドライン長を処理する点を除いて、これはあなたの方法1と同じです。

git tag | sorting_processing_etc | xargs git Push --delete Origin

xargsはプロセスを並列に実行することもできます。 xargsを使用した方法2:

git tag | sorting_processing_etc | xargs -P 5 -n 100 git Push --delete Origin

上記は、各プロセスで最大100個の引数を処理するために最大5つのプロセスを使用します。引数を試して自分のニーズに最も適したものを見つけることができます。

4
HomerM

ローカルとOriginの両方の場所から特定のタグを削除するための簡単なスクリプト。タグが本当に存在するかどうかを確認します。

if [ $(git tag -l "$1") ]; then
    git tag --delete  $1
    git Push --delete Origin $1

    echo done.
else
    echo tag named "$1" was not found
fi

使い方:

  • シェルスクリプトファイル(git-tag-purge.shなど)を作成してコンテンツを貼り付けます。
  • スクリプトファイルをchmodして実行可能にします。
  • スクリプトをグローバルに利用可能にする
  • gitプロジェクトにcdします。
  • スクリプトを呼び出す(例:
    $> git-tag-purge.sh tag_name
4
Dimitar Vlasev

あなたがSourceTree - 素晴らしいGit GUI - を使うならば、あなたは以下をすることによってコマンドラインなしでこれを簡単にすることができます:

  1. SourceTreeでリポジトリを開きます
  2. 左側の[タグ]タブを選択して展開します
  3. 削除したいタグを右クリック
  4. 「YOUR_TAG_NAMEを削除」を選択してください
  5. 確認ウィンドウで、[リモートからタグを削除]を選択します。

これで、GitHub、BitBucket、その他のリポジトリのリモートとしてリストされている場所を問わず、YOUR_TAG_NAMEがローカルリポジトリとすべてのリモートから削除されます。

また、リモートではなくローカルでタグを削除した場合は、どこでも削除する必要があります。その場合は、元のタグと同じ名前で同じコミットで添付されている新しいタグを作成します。その後、上記の手順を繰り返して、どこでも削除します。

3
Chris Sprague

PowerShellを使用していて、それらの束を削除したい場合は、次のようにします。

# Local tags:
git tag -l | foreach { git tag -d $_ }

# Remote tags:
git tag -l | foreach { git Push --delete Origin $_ }

もちろん、削除する前にそれらをフィルタリングすることもできます。

git tag -l | Where-Object { $_ -like "build-*" } | foreach { git tag -d $_ }
3
rsenna

という文字で始まるタグを作成した場合は、 #ST002、あなたはuが通常のパターンを使って削除することができないのを見つけるかもしれません。すなわち.

git tag -d #STOO2

タグを削除しませんが、 String Literal のようにラップします。

git tag -d "#ST002" or git tag -d '#ST002'

それはそれが削除されます。を使用して間違いを犯した人がタグ名を書くのを手助けすることを望んでいます。

2
MernXL

これは、リモートで台無しにすることなくローカルでテストするためのローカルテストケースです。

~/p $ mkdir gittest    
~/p/git $ cd gittest/
~/p/gittest $ git init
Initialized empty Git repository in /Users/local_user/p/gittest/.git/
 ~/p/gittest $ touch testfile.txt
 ~/p/gittest $ git add testfile.txt
 ~/p/gittest $ git commit -m "initial commit"
[master (root-commit) 912ce0e] initial commit
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 testfile.txt
 ~/p/gittest $ git tag
 ~/p/gittest $ git tag -a testtag
 ~/p/gittest $ git tag
testtag
 ~/p/gittest $ git show-ref
912ce0e40635c90241fdab756dce7ea34938de57 refs/heads/master
b0a6c15cabb990e6d6c46f762891b63608d962f3 refs/tags/testtag
 ~/p/gittest $ cd ..
 ~/p $ mkdir gitbare
 ~/p $ cd gitbare
 ~/p/gitbare $ git init --bare
Initialized empty Git repository in /Users/local_user/p/gitbare/
 ~/p/gitbare $ cd ..
 ~/p $ cd gittest/
 ~/p/gittest $ git remote add Origin /Users/local_user/p/gitbare
 ~/p/gittest $ git Push -u Origin master
Counting objects: 3, done.
Writing objects: 100% (3/3), 215 bytes | 215.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To /Users/local_user/p/gitbare
 * [new branch]      master -> master
Branch 'master' set up to track remote branch 'master' from 'Origin'.
 ~/p/gittest $ git Push Origin testtag
Counting objects: 1, done.
Writing objects: 100% (1/1), 163 bytes | 163.00 KiB/s, done.
Total 1 (delta 0), reused 0 (delta 0)
To /Users/local_user/p/gitbare
 * [new tag]         testtag -> testtag
 ~/p/gittest $ git show-ref
912ce0e40635c90241fdab756dce7ea34938de57 refs/heads/master
912ce0e40635c90241fdab756dce7ea34938de57 refs/remotes/Origin/master
b0a6c15cabb990e6d6c46f762891b63608d962f3 refs/tags/testtag
 ~/p/gittest $ git Push -d Origin testtag
To /Users/local_user/p/gitbare
 - [deleted]         testtag
 ~/p/gittest    git tag -d testtag
Deleted tag 'testtag' (was b0a6c15)
 ~/p/gittest $ git show-ref
912ce0e40635c90241fdab756dce7ea34938de57 refs/heads/master
912ce0e40635c90241fdab756dce7ea34938de57 refs/remotes/Origin/master
 ~/p/gittest
2
Adnan Y
git tag -d your_tag_name
git Push Origin :refs/tags/your_tag_name

1行目はyour_tag_nameをローカルレポジトリから削除し、2行目はそれをリモートレポジトリから削除します。これでyour_tagはローカルとリモートの両方のリポジトリから完全に削除されましたが、時にはあなたのリリースセクションで手動でGitHubによって作成された削除されたタグを削除する必要があるかもしれません。

1
kokabi

こんにちはちょうど私が作成したエイリアスを共有したいと思いました。それは同じことをします:

以下を〜/ .gitconfigに追加してください。

[alias]
    delete-tag = "!f() { \
            echo 'deleting tag' $1 'from remote/Origin ausing command: git Push --delete Origin tagName;'; \
            git Push --delete Origin $1; \
            echo 'deleting tag' $1 'from local using command: git tag -d tagName;'; \
            git tag -d $1; \
        }; f"

使い方は次のようになります。

-->git delete-tag v1.0-DeleteMe
deleting tag v1.0-DeleteMe from remote/Origin ausing command: git Push --delete Origin tagName;
To https://github.com/jsticha/pafs
 - [deleted]             v1.0-DeleteMe
deleting tag v1.0-DeleteMe from local using command: git tag -d tagName;
Deleted tag 'v1.0-DeleteMe' (was 300d3ef22)
0
ranma2913