etc./StackOverFlow

원격 태그를 삭제하는 방법은 무엇입니까?

청렴결백한 만능 재주꾼 2021. 9. 28. 00:13
반응형

질문자 :markdorison


이미 푸시된 Git 태그를 어떻게 삭제합니까?



답변자 : Adam Franco


원격 태그 이름에 대한 '빈' 참조를 푸시할 수 있습니다.

 git push origin :tagname

또는 더 --delete 옵션을 사용합니다(또는 git 버전이 1.8.0보다 오래된 경우 -d

 git push --delete origin tagname

git에는 태그 네임스페이스와 브랜치 네임스페이스가 있으므로 브랜치와 태그에 동일한 이름을 사용할 수 있습니다. 태그 대신 분기를 실수로 제거하는 일이 없도록 하려면 분기를 삭제하지 않는 전체 참조를 지정할 수 있습니다.

 git push origin :refs/tags/tagname

로컬 태그도 삭제해야 하는 경우 다음을 사용합니다.

 git tag --delete tagname

배경

분기, 태그 또는 기타 참조를 원격 저장소로 푸시하려면 "어떤 저장소, 어떤 소스, 어떤 대상"을 지정해야 합니까?

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

마스터 브랜치를 오리진의 마스터 브랜치로 푸시하는 실제 예는 다음과 같습니다.

 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

소스 참조(콜론 앞 부분)를 생략하면 대상에 '아무것도' 푸시하지 않고 원격 쪽에서 참조를 삭제합니다.



답변자 : quexer


더 직관적인 방법은

 git push --delete origin YOUR_TAG_NAME

IMO 접두사 콜론 구문은 이 상황에서 약간 이상합니다.



답변자 : Alex Dean


삭제할 원격 태그 v0.1.0 이 있고 원격이 origin 이면 간단히 다음을 수행합니다.

 git push origin :refs/tags/v0.1.0

로컬에서도 태그를 삭제해야 하는 경우:

 git tag -d v0.1.0

Git의 비정상 : 삭제 구문에 대한 설명은 Adam Franco 의 답변 을 참조하세요.



답변자 : Siddhartha Mukherjee


모든 로컬 태그를 삭제하고 원격 태그 목록을 가져옵니다 .

 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


답변자 : Andrea


원격 저장소에서 태그를 제거하려면:

 git push --delete origin TAGNAME

로컬에서 태그를 삭제할 수도 있습니다.

 git tag -d TAGNAME


답변자 : Ayub


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

첫 번째 줄은 로컬 your_tag_name 을 삭제하고 두 번째 줄은 원격 your_tag_name 을 삭제합니다.

GitHub를 사용하는 사람들에게는 한 단계 더 필요합니다. 즉, 초안을 버리는 것 입니다. 여기에 이미지 설명 입력



답변자 : Mahmoud Zalt


터미널에서 다음을 수행하십시오.

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

이제 Github.com으로 이동하여 새로고침하면 사라집니다.



답변자 : L Y E S - C H I O U K H


로컬 태그 '12345' 삭제

 git tag -d 12345

원격 태그 '12345' 삭제(예: GitHub 버전도 포함)

 git push origin :refs/tags/12345

대안적 접근

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

여기에 이미지 설명 입력



답변자 : Alex Vazquez Fente


원격 태그로 명명된 원격 분기가 있는 경우 다음 명령이 모호하다는 점에 유의하세요.

 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>'


답변자 : TonyH


수천 개의 원격 태그에 대해 최대 100배 빠른 방법

11,000개 이상의 태그를 삭제해야 하는 동안 이러한 답변을 읽은 후, 구울 시간이 없는 한 xargs

고군분투하면서 두 가지 훨씬 빠른 방법을 찾았습니다. 둘 다 git tag 또는 git ls-remote --tags 로 시작하여 원격에서 삭제하려는 태그 목록을 만듭니다. 당신이 생략하거나 대체 할 수있는 아래의 예에서 sorting_proccessing_etc 하나와 grep , ING sort , 보내고 tail 보내고 또는 head 당신이 원하는 보내고 (예 : grep -P "my_regex" | sort | head -n -200 등) :


이 첫 번째 방법은 xargs 사용하는 것보다 훨씬 빠르며 아마도 20~100배 더 빠르며 한 번에 수천 개의 태그와 함께 작동합니다.

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

어떻게 작동합니까? 줄로 구분된 일반 태그 목록은 공백으로 구분된 태그의 한 줄로 변환되며 각 태그 앞에 : so 가 추가됩니다. . .

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

이 형식 태그와 함께 git push 를 사용하면 각 원격 참조에 아무 것도 푸시하지 않고 이를 지웁니다(이 방법으로 푸시하는 일반적인 형식은 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 " ")


답변자 : Chris Sprague


훌륭한 Git GUI인 SourceTree를 사용하는 경우 다음을 수행하여 명령줄 없이 쉽게 이 작업을 수행할 수 있습니다.

  1. SourceTree에서 저장소 열기
  2. 왼쪽의 "태그" 탭을 선택하고 확장합니다.
  3. 삭제하려는 태그를 마우스 오른쪽 버튼으로 클릭합니다.
  4. 'Your_TAG_NAME 삭제'를 선택하세요.
  5. 확인 창에서 "Remove Tag From Remotes"를 선택합니다.

이제 YOUR_TAG_NAME이(가) 로컬 저장소와 모든 원격에서 제거됩니다. GitHub, BitBucket 또는 해당 저장소에 대한 원격으로 나열한 곳이면 어디든 상관 없습니다.

또한 로컬에서 태그를 삭제했지만 원격 원본에서는 삭제하지 않았고 모든 곳에서 삭제하려는 경우 이름이 동일하고 원본과 동일한 커밋에 첨부된 새 태그를 생성하기만 하면 됩니다. 그런 다음 위의 단계를 반복하여 모든 곳을 삭제합니다.



답변자 : MeganZhou


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을 참조하세요.



답변자 : Lucent Fox


패턴과 일치하는 태그를 제외한 모든 태그를 제거하여 지난 몇 달 간의 프로덕션 태그를 제외한 모든 태그를 삭제할 수 있었습니다.

모든 원격 태그 삭제 및 삭제에서 표현식 제외

 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


답변자 : rsenna


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 $_ }


답변자 : TonyH


@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


답변자 : Richard Venable


다른 답변은 이를 수행하는 방법을 지적하지만 이것이 원격 저장소이기 때문에 결과를 염두에 두어야 합니다.

On Retagging 섹션의 git tag man 페이지에는 원격 repo의 다른 사용자에게 변경 사항을 정중하게 알리는 방법에 대한 좋은 설명이 있습니다. 그들은 다른 사람들이 어떻게 당신의 변경 사항을 받아야 하는지 알릴 수 있는 편리한 발표 템플릿을 제공합니다.



답변자 : Dimitar Vlasev


로컬 및 원본 위치 모두에서 지정된 태그를 제거하는 간단한 스크립트입니다. 태그가 실제로 존재하는지 확인합니다.

 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
    )


답변자 : VonC


git push --delete origin $TAGNAME 은 올바른 접근 방식입니다(로컬 삭제 외에).

하지만: Git 2.31을 사용해야 합니다.

" git push $there --delete " ( man ) 는 오류로 진단되어야 했지만 대신 일치하는 푸시로 바뀌었고 Git 2.31(2021년 1분기)에서 수정되었습니다.

Junio C gitster ( gitster )의 commit 20e4164 (2021년 2월 23일)를 참조하십시오.
(2021년 2월 25일, 커밋 1400458 에서 Junio C gitster -- gitster -- 병합)

push : --delete ''를 일치하는 푸시로 바꾸지 마십시오.

통지자: Tilman Vogel

우리는 구문 설탕 "추가하면 git push remote --delete "( 사람을 ) <ref> "에 git push "( 사람이 정식으로 동의어로) git push remote ( 사람 )에서 구문 f517f1f ( " builtin-push : add ( man ) --delete as syntactic sugar for :foo", 2009-12-30, Git v1.7.0-rc0 -- merge ), 우리는 <ref> 가 비어 있지 않은지 충분히 주의하지 않았습니다.

맹목적으로 "--delete"를 ":"로 다시 쓴다는 것은 빈 문자열 <ref> 이 refspec ":"이 된다는 것을 의미하며, 이는 아무것도 삭제하지 않는 "일치하는" 푸시를 요청하는 구문입니다.

더 나쁜 것은 빨리 감기가 가능한 일치하는 심판이 있었다면 사용자가 아직 푸시할 준비가 되지 않았다고 느끼더라도 조기에 게시되었을 것입니다. 이는 진정한 재앙이 될 것입니다.



답변자 : HomerM


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

위는 최대 5개의 프로세스를 사용하여 각 프로세스에서 최대 100개의 인수를 처리합니다. 요구 사항에 가장 적합한 것을 찾기 위해 인수를 실험할 수 있습니다.



답변자 : MernXL


# 문자로 시작하는 태그가 생성된 경우( #ST002 ) 일반 패턴을 사용하여 삭제할 수 없다는 것을 알 수 있습니다. 즉

 git tag -d #STOO2

태그를 삭제하지 않지만 다음과 같이 String Literal로 래핑합니다.

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

그러면 삭제됩니다. 태그 이름을 쓰기 위해 # 을 사용하는 실수를 저지른 누군가에게 도움이 되길 바랍니다.



답변자 : Wappenull


tortoise git 사용자의 경우 수백 개의 태그 규모에서 UI를 사용하여 한 번에 여러 태그를 삭제할 수 있지만 UI는 컨텍스트 메뉴 아래에 잘 숨겨져 있습니다.

탐색기 창에서 마우스 오른쪽 버튼 클릭 -> 참조 찾아보기 -> ref/refmotes/name을 마우스 오른쪽 버튼으로 클릭 -> '원격 태그 삭제' 선택

여기에 이미지 설명 입력

https://tortoisegit.org/docs/tortoisegit/tgit-dug-browse-ref.html 참조



답변자 : Adnan Y


다음은 원격을 사용하지 않고 로컬에서 테스트하는 로컬 테스트 케이스입니다.

 ~/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


답변자 : ranma2913


동일한 작업을 수행하는 내가 만든 별칭을 공유하고 싶었습니다.

~/.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)


답변자 : asafeca


원격 저장소에서 태그를 삭제하려면 다음을 사용할 수 있습니다.

 git push <remote> :refs/tags/<tagname>

위의 내용을 해석하는 방법은 null 값으로 읽는 것인데, 콜론 앞의 값은 원격 태그 이름으로 푸시됩니다.



답변자 : karthi190


이것은 나를 위해 일했습니다.

 git push --force origin refs/tags/<tag_name>:refs/tags/<tag_name>


출처 : Here


출처 : http:www.stackoverflow.com/questions/5480258/how-to-delete-a-remote-tag">

반응형