수정 된 git 태그 이름과 메시지가 이미 존재하기 때문에 거부 됨

데이비드

나는 프로젝트에 늦게 왔고 이전 git 태그 이름과 메시지를 수정하고 싶었으므로 여기 stackoverflow에 대한 몇 가지 답변에 따라 업데이트했습니다.

git tag newname oldname
git tag -d oldname
git push origin :refs/tags/oldname
git push --tags

이름이 변경되었지만 해당 메시지도 수정하고 싶었으므로 다음과 같이했습니다.

git tag newname newname -f -m "new message for renamed tag"

다음을 통해 볼 때 작동하는 것처럼 보였습니다.

git tag -n1

그러나 지금 시도 git push --tags하면 다음 오류가 발생합니다.

error: failed to push some refs to 'https://blah@blah/blah/repo-name.git'
hint: Updates were rejected because the tag already exists in the remote.

지금 무엇을 해야할지 모르겠습니다 ...

1) 새 이름 / 메시지를 유지하고 실패없이 태그를 푸시 할 수 있도록 어떻게 수정합니까?

2) 처음에이를 수행하는 더 나은 방법은 무엇 이었을까요?

감사합니다

화요일

짧은 답변

리모컨에서 태그를 삭제 한 다음 다시 밀어서 다시 생성합니다 (또는을 사용 --force하여 한 번에 둘 다 수행).

토론

아이디어 태그 뒤에은 (레이블로, 분기 이름의 생각과 반대로 절대 변경 레이블 점이다 않는 변경). 결과적으로 Git은 일반적으로 기존 태그를 가져 와서 새롭고 다른 위치를 가리키는 것을 꺼립니다.

이것이 -f태그를 변경할 때 (force) 플래그 를 사용해야하는 이유입니다 .

git tag newname newname -f -m "new message for renamed tag"

가 없으면 -fGit은 태그가 이미 존재한다고 불평하고 아무것도하지 않습니다.

을 사용하고 있기 때문에 주석-m달린 태그받게 됩니다. 그렇지 않으면 어떤 식 으로든 태그를 변경하지 않고 문제가 없기 때문에 이것은 중요합니다.

Digression : 일반 태그와 주석이 달린 태그

위에서 언급 한 브랜치 (좀 더 구체적으로는 브랜치 이름 )와 태그는 모두 레이블입니다.

master일반적으로 같은 브랜치 이름 은 commit-ID로 일부 커밋을 직접 가리 킵니다. 따라서 master커밋 ID로 읽고 변환 할 수 있습니다. git rev-parse명령은 정확히 수행합니다

$ git rev-parse master
3ad15fd5e17bbb73fb1161ff4e9c3ed254d5b243

그러나 태그 이름은 커밋을 직접 가리킬 수 있습니다.

$ git tag temp-tag master
$ git rev-parse temp-tag
3ad15fd5e17bbb73fb1161ff4e9c3ed254d5b243
$ git tag -d temp-tag

이를 경량 태그 라고합니다 .

또는 태그를 나타내는 새로 생성 된 git 객체가리킬 수 있습니다 (호출 을 수행하는 사람과 원하는 정도에 따라 태그 객체 또는 주석이 달린 태그 객체 라고 함). 메시지를 포함하거나로 -a만든 태그 는 다음 주석 태그 중 하나를 만듭니다 .

$ git tag -m foo temp-tag master
$ git rev-parse temp-tag
04565b0274c13ac49a70b8e34cdb9c912e02f0ab

이 주석이 달린 태그는와 다른 ID를 가지고 master있습니다. 실제로는 한 쌍의 항목으로 구성됩니다. 가벼운 스타일 태그는 저장소의 주석이 달린 태그 객체를 가리 킵니다. 커밋을 가리키는 주석이 달린 태그 객체 :

$ git cat-file -p temp-tag | sed 's/@/ /'
object 3ad15fd5e17bbb73fb1161ff4e9c3ed254d5b243
type commit
tag temp-tag
tagger Chris Torek <chris.torek gmail.com> 1461965004 -0700

foo
$ git tag -d temp-tag

메모 object커밋의 ID를 포함하는 라인을.

(Aside : git cat-file -p커밋 ID를 포함하여 원시 ID를 시도 하십시오. ID가있는 것을 볼 수 있습니다. 파이프를 통해 tree시도 하거나 상당히 길 수 있기 때문에 시도하십시오. 또한 해시 값, 사물 에 대해 실행 해보십시오. 예를 들어 . 이들 모두는 매우 유익합니다.)git cat-file -plessmoregit rev-parse3ad15fd5e17bbb73fb1161ff4e9c3ed254d5b243git rev-parse 3ad15

일단 생성 된 객체는 단일 비트가 아닌 비트가 아닌 변경할 수 없습니다. 그들은 완전히 제거 할 수 있습니다 1 만 변경되지 않습니다. 따라서 주석이 달린 태그를 이동하려면 이전 태그를 삭제 한 다음 새 해시 ID를 가져 오는 새 태그를 만들어야합니다. --force플래그 차종은 한 단계에서이 작업을 수행 GIT.

원래 문제로 돌아 가기

태그는 이동 하지 않아야 하므로 Git (현재 2 ) 은 태그가 이동 하지 않는지 확인하고 확인합니다. 기존 경량 또는 주석 태그를 이동하려면 사용해야 --force하거나 -f. 경량 태그의 경우 최소한 실제로는 태그를 삭제 한 다음 (커밋은 아님) 동일한 이름의 새 태그를 새 개체에 연결합니다. 주석이 달린 태그의 경우 경량 태그와 기본 주석 태그 객체를 모두 삭제 한 다음 새 기본 주석 태그 객체를 생성하고 새 경량 태그를 새 주석 태그 객체에 첨부합니다.

물론 이것을 두 단계로 나눌 수 있습니다.

에도 동일한 규칙이 적용됩니다 git push. / git push있으므로 두 단계를 하나로 숨기고 최적화 할 수 있지만 실제로는 삭제 및 다시 생성입니다.--force-f


1 개체를 제거하는 것은 실제로 상당히 복잡합니다. Git은 객체를 제거하는 것이 아니라 추가하는 것을 중심으로 구축되었습니다. 가비지 컬렉터 , git gc실행할 수있는 모두 내부적으로 별도의 폐품 단계의 무리로 구성 - 어떤 정말 결국 물건을 삭제하는 것을 수동이다.

2 1.8.2 이전의 Git 버전에서는 git push분기 규칙을 태그에 적용하여 작업이 빨리 감기 인 경우 태그를 푸시 할 수 있습니다. 1.8.2 릴리스 정보는 다음으로 시작됩니다.

"git push $ there tag v1.2.3"은 저장소에 이미 존재하는 v1.2.3 태그를 교체하는 데 사용됩니다. $ there 재 작성된 태그가 이전 태그 인 커밋의 자손 인 커밋을 가리키는 경우 v1.2.3 포인트. 이는 오류가 발생하기 쉬운 것으로 확인되었으며 이번 릴리스부터 refs / tags / 계층 구조 아래의 기존 참조를 업데이트하려는 모든 시도는 "--force"없이 실패합니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

그룹이 존재하거나 존재하지 않지만 존재하기 때문에 추가 할 수 없습니다.

분류에서Dev

Windows 7에서 10으로 업그레이드 컴퓨터를 부팅하거나 깨운 후 암호를 재설정하라는 메시지가 표시됨

분류에서Dev

Epplus-이름이 지정된 스타일을 추가하기 전에 이미 존재하는지 확인

분류에서Dev

태그가있는 경우 "필수 태그 누락"과 함께 메시지가 거부 됨

분류에서Dev

그룹이 이미 존재하기 때문에 사용자를 추가 할 수 없습니까?

분류에서Dev

PHP에서 HTML 태그가 지정된 이메일 만들기

분류에서Dev

그룹이 존재하고 존재하지 않지만 존재하기 때문에 추가 할 수 없습니다.

분류에서Dev

Gitlab CI : 보호 된 분기에 존재하는 태그가 지정된 커밋에 대해서만 파이프 라인 작업 실행

분류에서Dev

git 상태 로그를 구문 분석하고 수정 된 파일이 지정된 디렉토리에서 가져온 경우 종료

분류에서Dev

git pull이 "이미 최신 상태"를 반환하지만 분기 추적에 "로컬 만료"가 표시됨

분류에서Dev

git pull이 "이미 최신 상태"를 반환하지만 분기 추적에 "로컬 만료"가 표시됨

분류에서Dev

분기 된 git 로컬 저장소 분기를 업스트림에 존재하는 것과 일치하거나 정리하는 방법이 있습니까?

분류에서Dev

이미지가 CSS에 설정된 크기보다 크게 표시됨

분류에서Dev

두 번째 연결이 수락 된 후 소켓이 더 이상 존재하지 않기 때문에 ASIO segfault 부스트

분류에서Dev

개체가 이미 존재하기 때문에 다음 Netsh 설정을 설정할 수 없습니다.

분류에서Dev

mutt에서 태그가 지정된 다음 메시지로 이동

분류에서Dev

기존 이미지에서 생성 된 Docker 이미지 수정

분류에서Dev

기존 이미지에서 생성 된 Docker 이미지 수정

분류에서Dev

기존 열 이름과 충돌 할 때 dplyr가 전달 된 기호 / 정수를 평가하도록 강제

분류에서Dev

이미지 근처의 이름 태그 수정 문제

분류에서Dev

SwiftUI 미리보기에 오류가 표시됨-이 파일에서 미리 볼 수 없음-현재 대상에 조정 된 빌드 설정이 필요함

분류에서Dev

재부팅하기 전에 새 HD 경로가 정확하고 재부팅 후 이름이 변경됨

분류에서Dev

정수 풀에 잘못된 바이트 태그 : 19 오류 메시지

분류에서Dev

재정의 된 woocommerce 이메일에 이미지가 표시되지 않음

분류에서Dev

Mutt : 일부 이메일에 태그가 지정된 경우에만 이메일 이동

분류에서Dev

이름이 데이터베이스에 저장된 <img> 태그에 이미지를 표시하는 방법

분류에서Dev

셀러리 로그에 "권한 거부 됨"이 표시됨

분류에서Dev

Windows의 이미지 파일에서 생성 / 액세스 / 수정 된 태그

분류에서Dev

sudo 및 화면 잠금에 대한 잘못된 비밀번호이지만 재부팅 직후 로그인하는 동안 수정 됨

Related 관련 기사

  1. 1

    그룹이 존재하거나 존재하지 않지만 존재하기 때문에 추가 할 수 없습니다.

  2. 2

    Windows 7에서 10으로 업그레이드 컴퓨터를 부팅하거나 깨운 후 암호를 재설정하라는 메시지가 표시됨

  3. 3

    Epplus-이름이 지정된 스타일을 추가하기 전에 이미 존재하는지 확인

  4. 4

    태그가있는 경우 "필수 태그 누락"과 함께 메시지가 거부 됨

  5. 5

    그룹이 이미 존재하기 때문에 사용자를 추가 할 수 없습니까?

  6. 6

    PHP에서 HTML 태그가 지정된 이메일 만들기

  7. 7

    그룹이 존재하고 존재하지 않지만 존재하기 때문에 추가 할 수 없습니다.

  8. 8

    Gitlab CI : 보호 된 분기에 존재하는 태그가 지정된 커밋에 대해서만 파이프 라인 작업 실행

  9. 9

    git 상태 로그를 구문 분석하고 수정 된 파일이 지정된 디렉토리에서 가져온 경우 종료

  10. 10

    git pull이 "이미 최신 상태"를 반환하지만 분기 추적에 "로컬 만료"가 표시됨

  11. 11

    git pull이 "이미 최신 상태"를 반환하지만 분기 추적에 "로컬 만료"가 표시됨

  12. 12

    분기 된 git 로컬 저장소 분기를 업스트림에 존재하는 것과 일치하거나 정리하는 방법이 있습니까?

  13. 13

    이미지가 CSS에 설정된 크기보다 크게 표시됨

  14. 14

    두 번째 연결이 수락 된 후 소켓이 더 이상 존재하지 않기 때문에 ASIO segfault 부스트

  15. 15

    개체가 이미 존재하기 때문에 다음 Netsh 설정을 설정할 수 없습니다.

  16. 16

    mutt에서 태그가 지정된 다음 메시지로 이동

  17. 17

    기존 이미지에서 생성 된 Docker 이미지 수정

  18. 18

    기존 이미지에서 생성 된 Docker 이미지 수정

  19. 19

    기존 열 이름과 충돌 할 때 dplyr가 전달 된 기호 / 정수를 평가하도록 강제

  20. 20

    이미지 근처의 이름 태그 수정 문제

  21. 21

    SwiftUI 미리보기에 오류가 표시됨-이 파일에서 미리 볼 수 없음-현재 대상에 조정 된 빌드 설정이 필요함

  22. 22

    재부팅하기 전에 새 HD 경로가 정확하고 재부팅 후 이름이 변경됨

  23. 23

    정수 풀에 잘못된 바이트 태그 : 19 오류 메시지

  24. 24

    재정의 된 woocommerce 이메일에 이미지가 표시되지 않음

  25. 25

    Mutt : 일부 이메일에 태그가 지정된 경우에만 이메일 이동

  26. 26

    이름이 데이터베이스에 저장된 <img> 태그에 이미지를 표시하는 방법

  27. 27

    셀러리 로그에 "권한 거부 됨"이 표시됨

  28. 28

    Windows의 이미지 파일에서 생성 / 액세스 / 수정 된 태그

  29. 29

    sudo 및 화면 잠금에 대한 잘못된 비밀번호이지만 재부팅 직후 로그인하는 동안 수정 됨

뜨겁다태그

보관