Git 저장소에서 모든 태그 삭제


224

Git 저장소에서 모든 태그를 삭제하고 싶습니다. 어떻게해야합니까?

로컬로 git tag -d tagname태그 를 삭제하고 git 제공자에서 태그를 업데이트합니다.tagnamegit push --tags

나는 시도했다 :

git tag -d *

그러나 나는 그것이 *현재 디렉토리의 파일 을 의미 한다는 것을 알았습니다 .

$ git tag -d *
error: tag 'file1' not found.
error: tag 'file2' not found.
...

태그가 많고 모두 삭제하고 싶다고 생각하십시오.

답변:


419
git tag | xargs git tag -d

모든 것을 파이프하는 Linux 철학을 사용하십시오. Windows에서는 동일한 명령으로 git bash를 사용하십시오.


136
감사. 이 명령은 로컬 태그를 삭제합니다. git tag -l | xargs -n 1 git push --delete origin리모컨에서 삭제하는 데 사용 했습니다.
Ionică Bizău

7
그리고 Windows에서?
CodeManX

7
@CoDEmanX Windows에서는 같은 명령으로 git bash를 사용해야합니다.
inf3rno

2
원격 태그를 삭제하지 않으며 수천 개의 태그에 대해서도 매우 느립니다.
Adrian Baker

1
'xargs'는 Windows 10에서 내부 또는 외부 명령으로 인식되지 않습니다
Gulzar

207

로컬 태그를 삭제하기 전에 원격 태그를 삭제하려면 다음을 수행하십시오.

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

로컬 사본을 삭제하십시오.

git tag | xargs git tag -d

원격 삭제는 수십 개의 태그에 비해 너무 느립니다.
ffxsam

5
: 원격 태그를 많이있는 경우이 대답은 빠른 방법입니다 stackoverflow.com/a/34395864/747044
아드리안

이 답변의 명령 순서는 로컬 전용 태그가 없다고 가정합니다.
Acumenus

이것은 너무 느리고 솔루션 아래가 더 좋습니다.
루트 바보

커밋에 암호를 입력해야하는 경우 각 태그에 암호가 필요합니다. 다른 솔루션이 더 좋습니다.
kap

56

하나의 명령으로 모든 태그를 강제로 삭제하는 것이 더 효율적일 수 있습니다. 특히 수백이 있다면.

적합한 비 Windows 쉘에서 모든 원격 태그를 삭제하십시오.

git tag | xargs -L 1 | xargs git push origin --delete

그런 다음 모든 로컬 태그를 삭제하십시오.

git tag | xargs -L 1 | xargs git tag --delete

'태그 이름 이없는 한 괜찮습니다 . 이를 위해서는 다음 명령이 정상이어야합니다.

git tag | xargs -I{} echo '"{}"' | tr \\n \\0 | xargs --null git push origin --delete
git tag | xargs -I{} echo '"{}"' | tr \\n \\0 | xargs --null git tag --delete

행 목록을 가져 와서 따옴표로 묶고 한 행으로 만든 다음 해당 행을 명령에 전달하는 다른 방법이있을 수 있습니다. 이것을 고려하면 최고의 고양이 스키닝 환경입니다.


3
나는 수천 개의 태그를 가지고 있었고, 원격 클라우드 저장소에서 하나씩 삭제하는 데 며칠이 걸렸으며 이것이 해결되었습니다.
Adrian Baker

무엇을 xargs -L 1합니까?
ymett

-L max-lines --max-lines [= max-lines] -l [max-lines] 명령 행당 최대 max-lines 비 공백 입력 라인을 사용하십시오. '-l'의 경우 max-lines는 생략하면 기본값은 1입니다. '-L'의 경우 인수는 필수입니다. 후행 공백은 행 수를 계산하기 위해 다음 입력 행에서 입력 행이 논리적으로 계속되도록합니다. '-x'를 의미합니다. 이 옵션의 '-l'형식은 POSIX 호환 '-L'옵션을 위해 더 이상 사용되지 않습니다. gnu.org/software/findutils/manual/html_node/find_html/…
Richard A Quadling

@RichardAQuadling 그래, 그 대답에 어떤 영향이 있습니까? git tag태그를 한 줄에 하나씩 반환 한 다음 xargs -L 1한 줄에 하나씩 출력합니다.
ymett

흠. 이 맥락에서 아무것도 보이지 않습니다! 터치를 느리게하는 것 외에!
Richard A Quadling

24

PowerShell을 사용하는 Windows 사용자의 경우 :

git tag | foreach-object -process { git tag -d $_ }

반환 된 각 줄에 대해 git tag실행 git tag -d하여 반환 된 모든 태그를 삭제합니다 .


23

리모컨에서 태그를 삭제하는 방법이 누락 된 Stefan의 답변에 추가합니다. Windows powershell의 경우이를 실행하여 원격 태그를 먼저 삭제 한 다음 로컬 태그를 삭제할 수 있습니다.

git tag | foreach-object -process { git push origin --delete $_ }
git tag | foreach-object -process { git tag -d $_ }  

19

로컬 리포지토리에 태그가없는 경우 로컬 리포지토리로 가져갈 필요없이 원격 태그를 삭제할 수 있습니다.

git ls-remote --tags --refs origin | cut -f2 | xargs git push origin --delete

"origin"을 원격 핸들러 이름으로 바꾸는 것을 잊지 마십시오.


우수한! 이것은 한 번에 그들을 모두 삭제했습니다. 다른 명령은 2 초마다 하나씩 삭제했습니다
fregante


6

다음을 사용할 수도 있습니다.

git tag -d $(git tag)

수천
개와

이 경우 다음과 같은 것을 사용할 수 있습니다 : git tag -d $ (git tag | head -n 999) x 번 실행
ViZeke

1

이 모든 옵션은 Linux에서만 작동하므로 다음을 처리 해야하는 사람과 동등한 창이 있습니다.

FOR /F usebackq %t IN (`git tag`) DO @git tag --delete %t

1

접두사가있는 태그를 삭제해야합니다

예를 들어, v0.0.1, v0.0.2, v0.0.3, v0.0.4, v0.0.5 태그를 삭제해야합니다

git tag -d $(git tag -l "v0.0.*")

접두사가있는 모든 태그를 나열하려면

git tag -l "v0.0.*"

태그를 삭제하려면

git tag -d $tag_names

이것이 첫 번째 진술의 작동 방식입니다


빠르고 간단하며 효과적입니다. 고마워요!
Vedran Mandić

0

Powershell v7은 삭제해야하는 업스트림 (원점) 태그가 많은 경우 병렬 foreach를 지원합니다.

git tag | foreach-object -Parallel { 
git push origin --delete $_ 
git tag -d $_ 
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.