Bagaimana untuk menghapus remote tag?

Bagaimana anda menghapus Git tag yang telah mendorong?

Larutan

Anda hanya perlu untuk mendorong 'kosong' referensi ke remote tag nama:

git push origin :tagname

Atau, lebih ekspresif, gunakan --delete pilihan (atau -d jika anda git versi lebih tua dari 1.8.0):

git push --delete origin tagname

Perhatikan bahwa git memiliki tag namespace dan cabang namespace sehingga anda dapat menggunakan nama yang sama untuk cabang dan untuk tag. Jika anda ingin memastikan bahwa anda tidak sengaja menghapus cabang bukannya tag, anda dapat menentukan full ref yang tidak akan pernah menghapus cabang:

git push origin :refs/tags/tagname

Jika anda juga perlu menghapus setempat tag, gunakan:

git tag --delete tagname

Latar belakang

Mendorong cabang, tag, atau lainnya ref ke remote repository melibatkan menentukan "yang repo, apa sumbernya, apa tujuan?"

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

Sebuah contoh nyata di mana anda mendorong anda menguasai cabang asal's master cabang adalah:

git push origin refs/heads/master:refs/heads/master

Yang karena default path, dapat disingkat menjadi:

git push origin master:master

Tags bekerja dengan cara yang sama:

git push origin refs/tags/release-1.0:refs/tags/release-1.0

Yang juga dapat disingkat menjadi:

git push origin release-1.0:release-1.0

Dengan menghilangkan sumber ref (bagian sebelum usus besar), anda push 'ada' ke tujuan, menghapus ref pada remote end.

Komentar (9)

Sebuah cara yang lebih mudah adalah

git push --delete origin YOUR_TAG_NAME

IMO awalan usus besar sintaks sedikit aneh dalam situasi ini

Komentar (5)

Jika anda memiliki remote tag v0.1.0 untuk menghapus, dan anda jauh lebih asal, maka cukup:

git push origin :refs/tags/v0.1.0

Jika anda juga perlu menghapus tag lokal:

git tag -d v0.1.0

Lihat Adam Franco's jawaban untuk penjelasan dari Git's tidak biasa : sintaks untuk penghapusan.

Komentar (5)

Menghapus semua lokal kategori dan mendapatkan daftar dari remote kategori:

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

Menghapus semua remote kategori

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

Membersihkan lokal kategori

git tag -l | xargs git tag -d
Komentar (4)

Untuk menghapus tag dari repositori:

git push --delete origin TAGNAME

Anda juga mungkin ingin menghapus tag lokal:

git tag -d TAGNAME
Komentar (1)

Dari terminal anda, lakukan ini:

git fetch
git tags
git tag -d {tag-name}
git push origin :refs/tags/{tag-name}

Sekarang pergi ke Github.com dan refresh, mereka menghilang.

Komentar (1)

Menghapus setempat tag '12345'

git tag -d 12345

Menghapus remote tag '12345' (misalnya; GitHub versi juga)

git push origin :refs/tags/12345

pendekatan alternatif

git push --delete origin tagName
git tag -d tagName

Komentar (0)
git tag -d your_tag_name
git push origin :refs/tags/your_tag_name

Baris pertama menghapus your_tag_name dari repo lokal dan yang kedua menghapus itu dari remote repo. Sekarang your_tag telah dihapus sepenuhnya, baik dari lokal dan remote repo, tapi kadang-kadang anda mungkin perlu untuk menghapus menghapus tag yang disusun oleh GitHub manual dalam rilis bagian.

Komentar (2)

Hanya perhatikan bahwa, jika anda memiliki remote branch bernama sebagai remote tag, perintah ini adalah ambigu:

git push origin :tagname
git push --delete origin tagname

Jadi anda harus menggunakan perintah ini untuk menghapus tag:

git push origin :refs/tags/

dan yang satu ini untuk menghapus cabang:

git push origin :refs/heads/

Jika tidak, anda akan mendapatkan error seperti ini:

error: dst refspec  matches more than one.
error: failed to push some refs to ''
Komentar (1)

Hingga 100x lebih cepat metode untuk ribuan remote tags

Setelah membaca jawaban-jawaban ini sementara perlu untuk menghapus lebih dari 11.000 tag, saya belajar metode ini bergantung atau xargs memakan waktu yang terlalu lama, kecuali jika anda memiliki jam untuk membakar.

Berjuang, saya menemukan dua much cara yang lebih cepat. Untuk investasi, mulai dengan git tag atau git ls-remote-tags untuk membuat daftar kategori yang ingin anda hapus pada remote. Dalam contoh di bawah ini anda dapat menghilangkan atau mengganti sorting_proccessing_etc dengan grep ' ing,semacam a'ing, ekor a'ing ataukepala a'ing yang anda inginkan (e.g. grep -P "my_regex" | jenis | head-n -200 etc) :


Ini metode pertama adalah yang tercepat, mungkin 20 100 times lebih cepat daripada menggunakan xargs, dan bekerja dengan setidaknya beberapa thousand kategori pada suatu waktu.


git push origin $(< git tag | sorting_processing_etc \
| sed -e 's/^/:/' | paste -sd " ") #note exclude "
Komentar (3)

Jika anda telah membuat sebuah tag yang disebut release01 dalam repositori Git anda akan menghapusnya dari repositori anda dengan melakukan hal berikut:

git tag -d release01 
git push origin :refs/tags/release01 

Untuk menghapus salah satu dari Mercurial repositori:

hg tag --remove featurefoo

Mohon referensi https://confluence.atlassian.com/pages/viewpage.action?pageId=282175551

Komentar (0)

Jika anda menggunakan SourceTree - besar Git GUI - maka anda dapat dengan mudah melakukan ini tanpa baris perintah dengan melakukan hal berikut:

  1. Terbuka repositori anda di SourceTree
  2. Pilih dan memperluas "Tag" tab di sebelah kiri
  3. Klik kanan pada tag yang anda ingin dihapus
  4. Pilih "Hapus YOUR_TAG_NAME"
  5. Dalam verifikasi jendela, pilih "Menghapus Tag Dari Remote"

YOUR_TAG_NAME sekarang akan dihapus dari repositori lokal dan semua remote - akan itu GitHub, BitBucket, atau di mana pun anda terdaftar sebagai remote untuk repositori tersebut.

Juga, jika anda menghapus tag secara lokal tetapi tidak pada jarak jauh asal-usul, dan anda ingin menghapusnya di mana-mana, maka hanya membuat tag baru yang memiliki nama yang sama dan dilampirkan pada saat yang sama melakukan sebagai asal-usul. Kemudian, ulangi langkah-langkah di atas untuk menghapus di mana-mana.

Komentar (1)

Seperti @CubanX menyarankan, I've split ini jawaban dari saya asli:

Di sini adalah metode yang beberapa kali lebih cepat dari xargs dan mungkin dalam skala yang jauh lebih banyak dengan tweaking. Ia menggunakan Github API, pribadi akses token, dan memanfaatkan utility paralel.

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\"`

paralel memiliki banyak mode operasi, tetapi umumnya parallelizes setiap perintah yang anda berikan sementara memungkinkan anda untuk menetapkan batas pada jumlah proses. Anda dapat mengubah --pekerjaan 2 parameter untuk memungkinkan operasi lebih cepat, tapi saya punya masalah dengan Github's batas, yang saat ini 5000/hr, tetapi juga tampaknya telah didokumentasikan jangka pendek batas juga.


Setelah ini, anda'll mungkin ingin menghapus setempat tag juga. Ini jauh lebih cepat sehingga kita dapat kembali menggunakan xargs dan git tag -d, yang cukup.

git tag | sorting_processing_etc | xargs -L 1 git tag -d
Komentar (5)

Aku ingin menghapus semua kategori kecuali untuk orang-orang yang sesuai pola sehingga aku bisa menghapus semua tapi beberapa bulan terakhir produksi kategori, di sini's apa yang saya digunakan untuk sukses besar:

Menghapus Semua Remote Kategori & Mengecualikan Ekspresi Dari Menghapus

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

Menghapus Semua Lokal Kategori & Mengecualikan Ekspresi Dari Menghapus

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

Lain jawaban yang menunjukkan cara untuk mencapai hal ini, tetapi anda harus diingat konsekuensi karena ini adalah repositori jauh.

Git tag halaman, di Pada pemberian tag ulang bagian, memiliki penjelasan yang baik tentang bagaimana untuk sopan menginformasikan remote repo's pengguna lain dari perubahan. Mereka bahkan memberikan berguna pengumuman template untuk berkomunikasi bagaimana orang lain harus mendapatkan perubahan.

Komentar (0)

Jika anda're menggunakan PowerShell, dan anda ingin menghapus sekelompok dari mereka:

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

# Remote tags:
git tag -l | foreach { git push --delete origin $_ }

Tentu saja, anda juga dapat menyaring mereka sebelum menghapus:

git tag -l | Where-Object { $_ -like "build-*" } | foreach { git tag -d $_ }
Komentar (0)

Script sederhana untuk menghapus tag tertentu dari lokal maupun lokasi asal. Dengan memeriksa apakah tag yang benar-benar ada.

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

Bagaimana untuk menggunakan:

  • Membuat shell script file (mis. git-tag-purge.sh) dan paste konten.
  • chmod script file untuk membuat executable.
  • Membuat script tersedia secara global
  • cd untuk anda git proyek
  • Panggilan script (misalnya
    $>git-tag-purge.sh tag_name
    )
Komentar (0)

Tampaknya seperti banyak pekerjaan untuk sesuatu xargs sudah tidak. Melihat kembali melalui thread ini, saya'm menebak kelambatan dengan xargs yang anda alami adalah karena jawaban asli yang digunakan xargs -n 1 ketika itu didn't benar-benar perlu.

Ini setara dengan anda metode satu kecuali bahwa xargs secara otomatis berkaitan dengan maksimum baris perintah yang panjang:

git tag | sorting_processing_etc | xargs git push --delete origin

xargs dapat menjalankan proses secara paralel juga. Metode 2 dengan xargs:

git tag | sorting_processing_etc | xargs -P 5 -n 100 git push --delete origin

Di atas menggunakan maksimal 5 proses untuk menangani maksimal 100 argumen masing-masing proses. Anda dapat melakukan percobaan dengan argumen untuk menemukan apa yang bekerja terbaik untuk kebutuhan anda.

Komentar (1)

Jika anda memiliki tag yang dibuat dimulai dengan # karakter, misalnya #ST002, anda mungkin menemukan bahwa anda tidak dapat menghapus menggunakan pola normal. yaitu

git tag -d #STOO2

Tidak akan menghapus tag, tapi membungkusnya dalam sebuah String Literal suka jadi

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

Yang akan mendapatkannya dihapus. Berharap ini akan membantu seseorang yang membuat kesalahan dengan menggunakan # untuk menulis nama tag.

Komentar (0)

Berikut ini adalah kasus tes untuk menguji hal ini secara lokal tanpa bermain-main dengan remote:

~/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
Komentar (0)