Bagaimana untuk menghapus remote tag?
Bagaimana anda menghapus Git tag yang telah mendorong?
3077
21
Bagaimana anda menghapus Git tag yang telah mendorong?
Anda hanya perlu untuk mendorong 'kosong' referensi ke remote tag nama:
Atau, lebih ekspresif, gunakan
--delete
pilihan (atau-d
jika anda git versi lebih tua dari 1.8.0):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:
Jika anda juga perlu menghapus setempat tag, gunakan:
Latar belakang
Mendorong cabang, tag, atau lainnya ref ke remote repository melibatkan menentukan "yang repo, apa sumbernya, apa tujuan?"
Sebuah contoh nyata di mana anda mendorong anda menguasai cabang asal's master cabang adalah:
Yang karena default path, dapat disingkat menjadi:
Tags bekerja dengan cara yang sama:
Yang juga dapat disingkat menjadi:
Dengan menghilangkan sumber ref (bagian sebelum usus besar), anda push 'ada' ke tujuan, menghapus ref pada remote end.
Sebuah cara yang lebih mudah adalah
IMO awalan usus besar sintaks sedikit aneh dalam situasi ini
Jika anda memiliki remote tag
v0.1.0
untuk menghapus, dan anda jauh lebihasal
, maka cukup:Jika anda juga perlu menghapus tag lokal:
Lihat Adam Franco's jawaban untuk penjelasan dari Git's tidak biasa
:
sintaks untuk penghapusan.Menghapus semua lokal kategori dan mendapatkan daftar dari remote kategori:
Menghapus semua remote kategori
Membersihkan lokal kategori
Untuk menghapus tag dari repositori:
Anda juga mungkin ingin menghapus tag lokal:
Dari terminal anda, lakukan ini:
Sekarang pergi ke Github.com dan refresh, mereka menghilang.
Menghapus setempat tag '12345'
Menghapus remote tag '12345' (misalnya; GitHub versi juga)
pendekatan alternatif
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.Hanya perhatikan bahwa, jika anda memiliki remote branch bernama sebagai remote tag, perintah ini adalah ambigu:
Jadi anda harus menggunakan perintah ini untuk menghapus tag:
dan yang satu ini untuk menghapus cabang:
Jika tidak, anda akan mendapatkan error seperti ini:
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
ataugit ls-remote-tags
untuk membuat daftar kategori yang ingin anda hapus pada remote. Dalam contoh di bawah ini anda dapat menghilangkan atau menggantisorting_proccessing_etc
dengangrep ' ing,
semacam a'ing,ekor a'ing atau
kepala 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.Jika anda telah membuat sebuah tag yang disebut
release01
dalam repositori Git anda akan menghapusnya dari repositori anda dengan melakukan hal berikut:Untuk menghapus salah satu dari Mercurial repositori:
Mohon referensi https://confluence.atlassian.com/pages/viewpage.action?pageId=282175551
Jika anda menggunakan SourceTree - besar Git GUI - maka anda dapat dengan mudah melakukan ini tanpa baris perintah dengan melakukan hal berikut:
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.
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 utilityparalel
.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
dangit tag -d
, yang cukup.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
Menghapus Semua Lokal Kategori & Mengecualikan Ekspresi Dari Menghapus
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.
Jika anda're menggunakan PowerShell, dan anda ingin menghapus sekelompok dari mereka:
Tentu saja, anda juga dapat menyaring mereka sebelum menghapus:
Script sederhana untuk menghapus tag tertentu dari lokal maupun lokasi asal. Dengan memeriksa apakah tag yang benar-benar ada.
Bagaimana untuk menggunakan:
Tampaknya seperti banyak pekerjaan untuk sesuatu
xargs
sudah tidak. Melihat kembali melalui thread ini, saya'm menebak kelambatan denganxargs
yang anda alami adalah karena jawaban asli yang digunakanxargs -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:xargs
dapat menjalankan proses secara paralel juga. Metode 2 denganxargs
: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.
Jika anda memiliki tag yang dibuat dimulai dengan # karakter, misalnya
#ST002
, anda mungkin menemukan bahwa anda tidak dapat menghapus menggunakan pola normal. yaituTidak akan menghapus tag, tapi membungkusnya dalam sebuah String Literal suka jadi
Yang akan mendapatkannya dihapus. Berharap ini akan membantu seseorang yang membuat kesalahan dengan menggunakan # untuk menulis nama tag.
Berikut ini adalah kasus tes untuk menguji hal ini secara lokal tanpa bermain-main dengan remote: