원격 태그를 삭제하려면 어떻게 해야 합니까?
이미 푸시된 Git 태그를 삭제하려면 어떻게 해야 합니까?
원격 태그 이름에 '빈' 참조를 푸시할 수 있습니다.
git push origin :tagname
좀 더 ▁the,,--delete
옵또(으)로 표시)-d
Git 버전이 1.8.0보다 이전 버전인 경우:
git push --delete origin tagname
git에는 태그 네임스페이스와 분기 네임스페이스가 있으므로 분기와 태그에 동일한 이름을 사용할 수 있습니다.태그 대신 분기를 실수로 제거할 수 없도록 하려면 분기를 삭제하지 않는 전체 참조를 지정할 수 있습니다.
git push origin :refs/tags/tagname
로컬 태그도 삭제해야 하는 경우 다음을 사용합니다.
git tag --delete tagname
배경
원격 저장소에 분기, 태그 또는 기타 참조를 푸시하는 작업에는 "어떤 repo, 어떤 소스, 어떤 대상"을 지정해야 합니까?
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
소스 참조(콜론 앞 부분)를 생략하면 대상에 '아무것도'하지 않고 원격 끝에서 참조를 삭제할 수 있습니다.
좀 더 간단한 방법은.
git push --delete origin YOUR_TAG_NAME
콜론 구문을 접두사로 사용하는 IMO는 이 상황에서 약간 이상합니다.
원격 태그가 있는 경우v0.1.0
삭제하기 위해, 그리고 당신의 리모컨은.origin
그러면 간단하게:
git push origin :refs/tags/v0.1.0
태그도 로컬로 삭제해야 하는 경우:
git tag -d v0.1.0
Git의 특이한 설명은 Adam Franco의 답변을 참조하십시오.:
삭제할 구문입니다.
모든 로컬 태그를 삭제하고 원격 태그 목록을 가져옵니다.
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
터미널에서 다음을 수행합니다.
git fetch
git tag
git tag -d {tag-name}
git push origin :refs/tags/{tag-name}
이제 Github.com 으로 이동하여 새로 고치면 사라집니다.
git push --delete origin $TAGNAME
올바른 접근 방식입니다(로컬 삭제 추가).
하지만: Git 2.31+ (2021년 1분기)를 꼭 사용하세요.
오류로git push $there --delete
(man) 진단했어야 했지만, Git 2.31(Q1 2021)로 수정된 일치 푸시로 전환되었습니다.
주니오 C 하마노()gitster
의 커밋 20e4164(2021년 2월 23일)를 참조하십시오.
(주니오 C 하마노에 의해 합병 -- -- 1400458, 2021년 2월 25일 커밋)
돌지
push
않는--delete ''
일치하는 밀어내기에.알림:틸만 보겔
우리가
git push remote --delete
(man)구문 설탕을 추가했을 때 ""<ref>
f517f1f(")에서 표준 구문과 동의어로 ""로.git push
(man)builtin-push
:add
(man)--delete
:foo"에 대한 통사적 설탕으로서, 2009-12-30, Git v1.7.0-rc0 -- 병합), 우리는 그것을 확실히 할 만큼 충분히 주의하지 않았습니다.<ref>
비어 있지 않습니다.으로 " 목적으다쓰시기맹로▁""를 다시
--delete <ref>
"에게:<ref>
빈 문자열을 의미합니다.<ref>
refspec " 과 " 입니다.:
이 구문은 아무것도 삭제하지 않는 "잘못된" 푸시를 요청하는 구문입니다.더 나쁜 것은 사용자가 아직 밀어낼 준비가 되지 않았다고 느끼더라도 빠르게 전달할 수 있는 일치하는 참조가 있었다면 너무 일찍 게시되었을 것이며, 이는 실제 재앙이 될 것입니다.
git tag -d your_tag_name
git push origin :refs/tags/your_tag_name
번째 은 첫번줄이삭니다됩제째를 삭제합니다.your_tag_name
로컬 레포 및 두 번째 라인 삭제에서your_tag_name
먼 곳에서.
GitHub을 사용하는 사람들은 초안을 폐기하는 한 단계가 더 필요합니다.
원격 저장소에서 태그를 제거하는 방법
git push --delete origin TAGNAME
태그를 로컬로 삭제할 수도 있습니다.
git tag -d TAGNAME
이 두 단계는 잘 작동합니다.
# delete local tag '1.0.0'
git tag -d 1.0.0
# delete remote tag '1.0.0' (eg, GitHub version too)
git push origin :refs/tags/1.0.0
로컬 태그 '12345' 삭제
git tag -d 12345
원격 태그 '12345'을(를) 삭제합니다(예: GitHub 버전도).
git push origin :refs/tags/12345
대안적 접근법
git push --delete origin tagName
git tag -d tagName
원격 태그로 명명된 원격 분기가 있는 경우 다음 명령은 모호합니다.
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>'
만경든우를라는 :release01
Git 저장소에서 다음을 수행하여 저장소에서 제거할 수 있습니다.
git tag -d release01
git push origin :refs/tags/release01
Mercurial 저장소에서 제거하기
hg tag --remove featurefoo
https://confluence.atlassian.com/pages/viewpage.action?pageId=282175551 을 참조하십시오.
수천 개의 원격 태그를 위한 최대 100배 빠른 방법
태그를 이 후, 저는 이하여 11,000개의 태그를 학습했습니다.xargs
태울 시간이 없는 한 너무 오래 걸립니다.
고군분투하면서, 저는 두 가지 더 빠른 방법을 찾았습니다.두 가지 모두에서 시작합니다.git tag
또는git ls-remote --tags
원격에서 삭제할 태그 목록을 만듭니다.할 수 .sorting_proccessing_etc
아무렇게나grep
ing,sort
ing,tail
oring 는head
원하는 ing(예: grep -P "my_regex" | sort | head -n -200
기타) :
이 첫 번째 방법은 사용하는 것보다 20-100배 더 빠릅니다.xargs
한 번에 최소 수천 개의 태그로 작동합니다.
git push origin $(< git tag | sorting_processing_etc \
| sed -e 's/^/:/' | paste -sd " ") #note exclude "<" for zsh
이것은 어떻게 작동합니까?으로 태그의 되며, 각에는 " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " "" " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " ":
그래서...
tag1 becomes
tag2 ======> :tag1 :tag2 :tag3
tag3
용사를 합니다.git push
이 형식의 태그로 각 원격 참조에 아무것도 밀어넣지 않고 지워버립니다. (이 방식으로 밀어넣기 위한 일반적인 형식은local_ref_path:remote_ref_path
).
방법 2는 이 페이지의 다른 곳에서 별도의 답변으로 표시됩니다.
이 두 가지 방법을 모두 사용하면 로컬 태그도 삭제할 수 있습니다.이것이 훨씬 빠르기 때문에 다시 사용할 수 있습니다.xargs
그리고.git tag -d
그것으로 충분합니다.
git tag | sorting_processing_etc | xargs -L 1 git tag -d
또는 원격 삭제와 유사합니다.
git tag -d $(< git tag | sorting_processing_etc | paste -sd " ")
훌륭한 Git GUI인 SourceTree를 사용하는 경우 다음을 수행하여 명령줄 없이 쉽게 이 작업을 수행할 수 있습니다.
- SourceTree에서 리포지토리
- 왼쪽의 "태그" 탭을 선택하고 확장합니다.
- 삭제할 태그를 마우스 오른쪽 단추로 클릭합니다.
- 삭제_를 선택합니다.TAG_NAME"
- 확인 창에서 "원격에서 태그 제거"를 선택합니다.
이제 로컬 저장소와 모든 원격(GitHub, BitBucket 등)에서 해당 저장소의 원격으로 나열한 모든 원격이 제거됩니다.
또한 태그를 로컬에서 삭제했지만 원격 오리진에서는 삭제하지 않고 모든 곳에서 삭제하려면 오리진과 동일한 커밋에 연결된 이름의 새 태그를 생성하면 됩니다.그런 다음 위의 단계를 반복하여 모든 위치를 삭제합니다.
로컬 위치와 오리진 위치 모두에서 지정된 태그를 제거하는 간단한 스크립트입니다.태그가 실제로 존재하는지 확인합니다.
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-tag-tag.sh tag_name
)
@CubanX가 제안했듯이, 저는 이 대답을 원래의 대답과 분리했습니다.
보다 몇 배 더 빠른 방법이 있습니다.xargs
조정을 통해 훨씬 더 확장할 수 있습니다.개인 접근 토큰인 Github API를 사용하고 유틸리티를 활용합니다.
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
더 빠른 작동을 허용하기 위한 매개 변수이지만 현재 5000/hr인 Github의 속도 제한에 문제가 있었지만 문서화되지 않은 단기 제한도 있는 것 같습니다.
이 후에는 로컬 태그도 삭제할 수 있습니다.이것이 훨씬 빠르기 때문에 다시 사용할 수 있습니다.xargs
그리고.git tag -d
그것으로 충분합니다.
git tag | sorting_processing_etc | xargs -L 1 git tag -d
패턴과 일치하는 태그를 제외한 모든 태그를 제거하여 지난 몇 달 동안의 프로덕션 태그를 제외한 모든 태그를 삭제하고 싶었습니다. 여기 제가 성공적으로 사용한 내용이 있습니다.
모든 원격 태그 삭제 및 삭제에서 식을 제외
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
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 $_ }
Torothy git 사용자의 경우, 수백 개의 태그 규모로 UI를 사용하여 여러 개의 태그를 한 번에 삭제할 수 있지만, UI는 상황에 맞는 메뉴 아래에 잘 숨겨져 있습니다.
탐색기 창에서 -> 참조 찾아보기 -> ref/refmotes/name을 마우스 오른쪽 버튼으로 클릭합니다. -> '원격 태그 삭제'를 선택합니다.
https://tortoisegit.org/docs/tortoisegit/tgit-dug-browse-ref.html 을 참조하십시오.
다른 답변에서는 이를 수행하는 방법을 설명하지만, 원격 저장소이므로 결과를 염두에 두어야 합니다.
On Retagging 섹션에 있는 Git tag man 페이지에는 원격 repo의 다른 사용자에게 변경 사항을 정중하게 알리는 방법이 자세히 설명되어 있습니다.그들은 다른 사람들이 어떻게 당신의 변경사항을 얻어야 하는지를 전달하기 위한 유용한 공지 템플릿도 제공합니다.
뭔가를 위해 많은 일이 있는 것 같습니다.xargs
이미 있습니다.이 실타래를 통해 되돌아보면, 저는 그 느림이xargs
당신이 경험한 것은 원래의 대답이 사용되었기 때문입니다.xargs -n 1
그럴 필요가 없었을 때 말입니다.
이것은 당신의 방법과 동등합니다. 단,xargs
최대 명령줄 길이를 자동으로 처리합니다.
git tag | sorting_processing_etc | xargs git push --delete origin
xargs
프로세스를 병렬로 실행할 수도 있습니다. 2 - 2 (경소xargs
:
git tag | sorting_processing_etc | xargs -P 5 -n 100 git push --delete origin
위에서는 최대 5개의 프로세스를 사용하여 각 프로세스에서 최대 100개의 인수를 처리합니다.여러분은 여러분의 필요에 가장 잘 맞는 것을 찾기 위해 주장을 실험할 수 있습니다.
# 문자로 시작하는 태그가 있는 경우(예:#ST002
당신은 일반적인 패턴을 사용하여 삭제할 수 없다는 것을 알게 될 수 있습니다.
git tag -d #STOO2
태그를 삭제하지 않고 문자열 리터럴로 묶습니다.
git tag -d "#ST002" or git tag -d '#ST002'
그러면 삭제됩니다.#을 사용하여 태그 이름을 쓰는 실수를 한 사람에게 도움이 되기를 바랍니다.
원격 리포지토리에서 태그를 삭제하려면 다음을 사용합니다.
git push <remote> :refs/tags/<tagname>
위에서 설명하는 방법은 콜론을 원격 태그 이름으로 푸시하기 전의 값인 null 값으로 읽는 것입니다.
제가 만든 동일한 작업을 수행하는 별칭을 공유하고 싶을 뿐입니다.
다을추다니에 합니다.~/.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)
다음은 리모컨을 조작하지 않고 로컬에서 테스트할 수 있는 로컬 테스트 사례입니다.
~/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
여기에는 이미 많은 좋은 답변이 있지만, 모든 태그를 삭제해야 할 경우 PowerShell을 사용하는 이 라이너를 사용할 수 있습니다.
foreach($tag in (git tag)) { git tag -d $tag.Trim(); git push origin :refs/tags/$tag }
여기서 모든 태그 목록을 가져오고 각 로컬 태그를 삭제한 다음 원격 태그를 삭제합니다(GitHub에서 테스트됨).
이것은 나에게 효과가 있었습니다.
git push --force origin refs/tags/<tag_name>:refs/tags/<tag_name>
언급URL : https://stackoverflow.com/questions/5480258/how-can-i-delete-a-remote-tag
'programing' 카테고리의 다른 글
Azure 함수 - appsettings.json 사용 (0) | 2023.05.05 |
---|---|
애플리케이션 중앙에 표시할 대화 상자 위치를 설정하는 방법은 무엇입니까? (0) | 2023.05.05 |
Angular - ng: 명령을 찾을 수 없습니다. (0) | 2023.05.05 |
복수의 값을 한 번에 포스트그레스 테이블에 삽입하려면 어떻게 해야 합니까? (0) | 2023.05.05 |
ExpandoObject의 진정한 이점은 무엇입니까? (0) | 2023.05.05 |