git push local branch with same name as remote tag


110

product-0.2동일한 이름의 태그가 이미있는 원격 지점 에 새 로컬 지점을 푸시하려고합니다 (하지만 지점 자체는 존재하지 않음).

git push -v --tags --set-upstream origin product-0.2:product-0.2 
Pushing to https://****@github.com/mycompany/product.git
error: src refspec product-0.2 matches more than one.
error: failed to push some refs to 'https://****@github.com/mycompany/product.git'

와 같다:

git push origin product-0.2:/refs/heads/product-0.2 

다른 방법으로 작동하지만, 예를 들어 브랜치를 생성하고 product-0.1커밋 한 다음 태그를 적용합니다 product-0.1.

일부 사람들은 충돌하는 태그를 로컬에서 제거한 다음 브랜치를 푸시 한 다음 원격 태그를 검색하여이 문제를 해결하지만 번거롭고 오류가 발생하기 쉽습니다.

번거 로움을 최소화하면서 어떻게 브랜치를 만들 수 있습니까?

입력 해 주셔서 감사합니다


1
refs/heads/product-0.2:refs/heads/product-0.2, 즉 선행 슬래시없이 시도 하고 로컬 측에 전체 refspec을 제공하십시오.
knittl

git push origin product-0.2 : product-0.2
vpatil

답변:


162

다음 명령이 작동합니다.

git push origin refs/heads/product-0.2:refs/heads/product-0.2 

16
받아 들여진 대답, 이것은 명확화하는 방법입니다. 그래도 처음에 이름이 같은 태그와 브랜치를 가지지 않는 것이 더 쉽습니다. 일부 도구 (예 : SourceTree)가 문제를 일으키고 명령 줄을 유일한 솔루션으로 사용하여 자신의 장치에 맡겨 질 것입니다. 감사합니다!
youri

2
+1. 원격 이름 refs/remotes/remote_name/remote_branch
Kelvin

1
무의식적으로 태그 된 릴리스의 이름을 지정 master했으며 더 이상 동일한 이름으로 브랜치로 푸시 할 수 없습니다. git push origin refs/heads/master트릭을 수행했습니다 (그런 다음 태그를 삭제하여 발생하지 않음).
tresf

모범 사례를 제외하고는 여전히 푸시하려는 브랜치를 기본 브랜치로 푸시 할 수 없습니다. 어떻게 해결할 수 있습니까?
Baksteen

위의 해결 방법이 작동하지 않으면 원격 헤드를 제거한 후 수행하십시오. git push origin --delete refs / heads / BRANCHNAME
단독

42

브랜치와 연결된 태그를 확인합니다.

git tag

제 경우에는 지점 이름이 같은 태그가있었습니다. 그것을 삭제하면 효과가 있습니다.

git tag -d [tag-name]

1
잘 작동하고 내 지점과 같은 이름의 태그가 있습니다.
ChanceVI

20

이름을 변경하십시오.

로컬이든 원격이든 상관없이 이름 만 변경하면됩니다.

태그와 브랜치는 기본적으로 git에서 동일합니다. 커밋에 대한 포인터를 나타냅니다. 차이점은 커밋 할 때 분기 포인터가 진행되는 반면 태그는 정적으로 유지된다는 것입니다.

그러나git checkout 분기 또는 태그에서를 수행 할 수 있습니다 . 왜이 두 배로 된 이름으로 싸우겠습니까? 변경하십시오.


product-0.2.0'패치 수준'의 마지막 숫자를 사용 하여 태그 를 호출 했어야했거나 할 수 있었지만 여전히 명명 규칙이 적용되어 있었고 태그 이전에 분기가 생성되었을 때 문제가 발생하지 않았습니다.
youri

팀이 이미 브랜치를 사용하기 시작했다면 이름을 바꾸는 것이 무장하지 않습니까?
svassr dec.

아직 푸시하지 않은 엔티티의 이름을 변경하십시오.
TheBuzzSaw 2013

@TheBuzzSaw에 대해 확신하십니까? 로컬에서 나는 같은 이름을 가진 두 가지를 다른 것으로 가질 수 있기 때문입니다.
John John Pichler

1
위의 명령 (선택된 답변으로)이 질문을 해결했을 수 있지만 git에 익숙하지 않기 때문에 질문도 대답도 이해하지 못했습니다. 이 답변은 적어도 a) 조언 및 b) 설명-심지어 미래에 대한 권장 사항을 제공합니다. 나 자신의 질문을 고려해 보았 겠지만, 이미 전에 물어 본 것과 같은 댓글에 지쳤습니다-imho : 이해할 수없는 질문은 초보자 질문과 같지 않습니다. 그러나 인생이다)
마이클 펠트

15

동일한 브랜치 이름을 가진 태그 를 푸시하려는 경우 :

git push origin tag myTag

3
잘하셨습니다! 이것은 받아 들여진 대답이어야합니다. 항상 긴 꼬리 SO의 답변을 읽고
louis_guitton

아는 것은 유용하지만 질문에 전혀 대답하지 않습니다. 저자가 반대 방향이라고 강조했지만 대답으로는 거의 받아 들일 수 없다는 점을 강조하기 때문에 나는 그것을 반대하지 않을 것입니다.
Peter Halverson

12

오늘 아침에 정식 저장소로 푸시하려고했는데 다음과 같은 오류가 발생했습니다.

$ git push origin master
error: src refspec master matches more than one.
error: failed to push some refs to 'ssh://user@host/srv/git/repo'

이것은 실수로 로컬에서 마스터 태그를 생성했기 때문에 발생했습니다.

$ git tag
master
tag1
tag2
tag3
tag4

이 태그를 로컬에서 삭제 한 후 :

git tag -d master

나는 다시 밀 수 있었다.


좋은 설명입니다. 로컬 태그를 삭제해야합니다. 감사!
Chef Pharaoh

5

실패했습니다.

git push $origin $branch:$branch 

이것이 나를 위해 일하는 동안 :

git checkout $branch
git push $origin HEAD:$branch

1

소스 트리를 사용하는 경우 다음 단계를 따르십시오.

  1. 태그 섹션에서 분기의 태그 이름을 찾습니다.
  2. 태그 이름 삭제 태그를 클릭합니다.
  3. "원격에서 태그 제거"를 선택하고 확인을 클릭하십시오.

변경 사항을 푸시 해보십시오. 이제 작동합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.