Jak usunąć Git remote tag?
Jak usunąć znacznik git, który został już wypchnięty?
18 answers
Wystarczy wcisnąć "puste" odniesienie do nazwy zdalnego tagu:
git push origin :tagname
Lub, bardziej wyraziście, użyj opcji --delete
(lub -d
jeśli Twoja wersja git jest starsza niż 1.8.0):
git push --delete origin tagname
Jeśli chcesz również usunąć lokalny tag, użyj:
git tag --delete tagname
Tło
Przepchnięcie gałęzi, znacznika lub innego ref do zdalnego repozytorium wymaga określenia " push where, what source, what destination?"
git push where-to-push source-ref:destination-ref
Przykład z prawdziwego świata, w którym pchasz swoje gałąź główna do gałęzi głównej origin to:
git push origin refs/heads/master:refs/heads/master
Które ze względu na domyślne ścieżki można skrócić do:
git push origin master:master
Tagi działają tak samo:
git push origin refs/tags/release-1.0:refs/tags/release-1.0
Które można również skrócić do:
git push origin release-1.0:release-1.0
Pomijając źródłowy ref (część przed dwukropkiem), wciskasz " nic " do miejsca docelowego, usuwając ref na odległym końcu.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-30 03:52:52
Prostszym sposobem jest
git push --delete origin YOUR_TAG_NAME
IMO składnia przedrostka dwukropka jest trochę dziwna w tej sytuacji
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-05 10:30:55
Jeśli masz zdalny znacznik v0.1.0
do usunięcia, a Twoim zdalnym jest origin
, po prostu:
git push origin :refs/tags/v0.1.0
Jeśli musisz również usunąć tag lokalnie:
git tag -d v0.1.0
Zobacz Adam Franco 's answer for an explanation of Git' s unusual :
syntax for deletion.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-03 19:03:23
Usuń wszystkie lokalne tagi i uzyskaj listę zdalnych tagów :
git tag -l | xargs git tag -d
git fetch
Usuń wszystkie zdalne Tagi
git tag -l | xargs -n 1 git push --delete origin
Czyszczenie lokalnych tagów
git tag -l | xargs git tag -d
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-20 18:29:51
Aby usunąć znacznik ze zdalnego repozytorium:
git push --delete origin TAGNAME
Możesz również usunąć tag lokalnie:
git tag -d TAGNAME
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-09-04 10:30:51
Z terminala, zrób to:
git fetch
git tags
git tag -d {tag-name}
git push origin :refs/tags/{tag-name}
Teraz przejdź do Github.com i odświeżają, znikają.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-04 17:00:16
Zauważ, że jeśli masz zdalną gałąź o nazwie remote tag, te polecenia są niejednoznaczne:
git push origin :tagname
git push --delete origin tagname
Więc musisz użyć tego polecenia, aby usunąć tag:
git push origin :refs/tags/<tag>
I ten do usunięcia gałęzi:
git push origin :refs/heads/<branch>
Jeśli nie, otrzymasz taki błąd:
error: dst refspec <tagname> matches more than one.
error: failed to push some refs to '<repo>'
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-27 10:37:51
Jeśli utworzyłeś tag o nazwie release01
w repozytorium Git, usuniesz go ze swojego repozytorium wykonując następujące czynności:
git tag -d release01
git push origin :refs/tags/release01
Aby usunąć jeden z repozytorium Mercurial:
hg tag --remove featurefoo
Proszę o odniesienie https://confluence.atlassian.com/pages/viewpage.action?pageId=282175551
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-27 10:38:45
Usuń lokalny tag '12345'
git tag -d 12345
Usuń zdalny tag '12345' (np. wersja GitHub też)
git push origin :refs/tags/12345
Alternatywne podejście
git push --delete origin tagName
git tag -d tagName
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-02 13:12:31
Inne odpowiedzi wskazują, jak to osiągnąć, ale należy pamiętać o konsekwencjach, ponieważ jest to zdalne repozytorium.
Strona podręcznika git tag, w sekcji on Retagging, zawiera dobre wyjaśnienie, jak uprzejmie poinformować innych użytkowników zdalnego repo o zmianie. Dają nawet przydatny szablon ogłoszenia, aby komunikować się, w jaki sposób inni powinni uzyskać twoje zmiany.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-04 17:04:01
Do 100x szybsza metoda dla tysięcy zdalnych tagów
Po przeczytaniu tych odpowiedzi, podczas gdy trzeba usunąć ponad 11000 tagów, nauczyłem się tych metod polegania lub xargs
trwa zdecydowanie zbyt długo, chyba że masz godziny na spalenie.
Zmagając się, znalazłem dwa znacznie szybsze sposoby. W obu przypadkach zacznij od git tag
lub git ls-remote --tags
, aby utworzyć listę znaczników, które chcesz usunąć na pilocie. W poniższych przykładach można pominąć lub zastąpić {[7] } dowolnym grep
ing, sort
ing, tail
ing lub head
ING you want (np. grep -P "my_regex" | sort | head -n -200
itd) :
Ta pierwsza metoda jest zdecydowanie najszybsza, Może 20 do 100 razy szybsza niż używanie xargs
i działa z co najmniej kilkoma tysiącami tagów na raz.
git push origin $(< git tag | sorting_processing_etc \
| sed -e 's/^/:/' | paste -sd " ") #note exclude "<" for zsh
Jak to działa?
Normalna, oddzielona od linii lista znaczników jest konwertowana do pojedynczej linii znaczników oddzielonych spacjami, z których każdy poprzedzony jest :
so . . .
tag1 becomes
tag2 ======> :tag1 :tag2 :tag3
tag3
Użycie {[15] } z tym znacznikiem formatu wypycha nic do każdego zdalnego ref, kasowanie go( normalny format forsowania w ten sposób to local_ref_path:remote_ref_path
).
Metoda druga jest rozwinięta jako oddzielna odpowiedź gdzie indziej na tej samej stronie
Po obu tych metodach prawdopodobnie będziesz chciał usunąć swoje lokalne tagi.
Jest to znacznie szybsze, więc możemy wrócić do używania xargs
i git tag -d
, co jest wystarczające.
git tag | sorting_processing_etc | xargs -L 1 git tag -d
Lub podobne do zdalnego usuwania:
git tag -d $(< git tag | sorting_processing_etc | paste -sd " ")
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-07 21:18:25
Chciałem usunąć wszystkie tagi z wyjątkiem tych, które pasują do wzoru, aby móc usunąć wszystkie oprócz ostatnich kilku miesięcy tagów produkcyjnych, oto co kiedyś było wielkim sukcesem:
Usuń Wszystkie Znaczniki Zdalne I Wyklucz Wyrażenie Z Delete
git tag -l | grep -P '^(?!Production-2017-0[89])' | xargs -n 1 git push --delete origin
Usuń Wszystkie Lokalne Tagi I Wyklucz Wyrażenie Z Delete
git tag -l | grep -P '^(?!Production-2017-0[89])' | xargs git tag -d
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-25 23:11:03
Prosty skrypt usuwający dany znacznik zarówno z lokalizacji lokalnej, jak i origin. Z zaznaczeniem, czy znacznik rzeczywiście istnieje.
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
Jak używać:
- Utwórz plik skryptu powłoki (np. git-tag-purge.sh) i wklej zawartość.
- chmod plik skryptu, aby uczynić go wykonywalnym.
- Udostępnij skrypt globalnie
- cd do twojego projektu git
- skrypt wywołania (np.
$>git-tag-purge.sh tag_name
)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-25 12:07:52
Wydaje się, że dużo pracy dla czegoś {[2] } już robi. Patrząc wstecz przez ten wątek, domyślam się, że powolność z xargs
, której doświadczyłeś, wynika z tego, że oryginalna odpowiedź użyła xargs -n 1
, gdy naprawdę nie musiała.
Jest to równoważne Twojej metodzie one z tą różnicą, że xargs
automatycznie zajmuje się maksymalną długością wiersza poleceń:
git tag | sorting_processing_etc | xargs git push --delete origin
xargs
może również uruchamiać procesy równolegle. Metoda 2 z xargs
:
git tag | sorting_processing_etc | xargs -P 5 -n 100 git push --delete origin
Powyższe wykorzystuje maksymalnie 5 procesów do obsługuje maksymalnie 100 argumentów w każdym procesie. Możesz eksperymentować z argumentami, aby znaleźć to, co najlepiej odpowiada twoim potrzebom.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-05 15:21:38
Jak zasugerował @CubanX, oddzieliłem tę odpowiedź od oryginału:
Oto metoda, która jest kilka razy szybsza niż {[2] } i może być skalowana znacznie bardziej z tweakingiem. Wykorzystuje on API Github , osobisty token dostępu i wykorzystuje narzędzie 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
ma wiele trybów pracy, ale generalnie paralelizuje każde polecenie, które mu podasz, jednocześnie pozwalając na ustawienie limitów liczby procesów. Możesz zmienić parametr --jobs 2
na pozwalają na szybszą pracę, ale miałem problemy z limitami szybkości W Githubie , które obecnie wynoszą 5000/godz., ale wydaje się, że również mają nieudokumentowany limit krótkoterminowy.
Po tym prawdopodobnie będziesz chciał usunąć swoje lokalne tagi.
Jest to znacznie szybsze, więc możemy wrócić do używania xargs
i git tag -d
, co jest wystarczające.
git tag | sorting_processing_etc | xargs -L 1 git tag -d
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-07 21:00:46
Jeśli używasz PowerShell i chcesz usunąć kilka z nich:
# Local tags:
git tag -l | foreach { git tag -d $_ }
# Remote tags:
git tag -l | foreach { git push --delete origin $_ }
Oczywiście, można je również filtrować przed usunięciem:
git tag -l | Where-Object { $_ -like "build-*" } | foreach { git tag -d $_ }
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-23 11:44:15
Jeśli masz utworzony znacznik zaczynający się od # znak, np. #ST002
, może się okazać, że u nie są w stanie usunąć za pomocą normalnych wzorców. tj.
git tag -d #STOO2
Nie usunie znacznika, ale zawiąże go w ciąg znaków w ten sposób
git tag -d "#ST002" or git tag -d '#ST002'
To spowoduje, że zostanie usunięty. Nadzieję, że pomoże to komuś, kto popełnił błąd używając # aby napisać nazwy znaczników.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-12 16:23:38
Oto lokalny testcase, aby przetestować go lokalnie bez mieszania z pilotem:
~/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
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-03 18:36:00