참조 스펙을 사용하여 Git 태그를 지점으로 푸시하는 방법은 무엇입니까?


216

예를 들어 태그 1.0.0를 리모컨에 밀어 붙이고 싶습니다master 지점으로 .

나는 지금 다음을하고있다 :

git push production +1.0.0:master

1.0.0태그내부의 코드master가 원격 저장소의분기로 푸시 되기 때문에 푸시를 강제하고 싶습니다 .

내가 뭘 잘못하고 있죠?

업데이트 # 1

Git 리포지토리가 있는 서버에 SSH를 실행 git branch -l하면 master분기가 표시 되지 않습니다 .

업데이트 # 2

git tag -l원격 Git 리포지토리 내부에서 실행 한 후에 master는 다음과 같은 내용 이 표시됩니다.

git push production 1.0.0:master

실제로 태그를 푸시하고 새 분기가 아닌 이름 master지정된 태그를 작성했습니다 .

기본적으로 태그 의 내용 을 원격 Git 리포지토리 1.0.0master분기 로 푸시하고 싶습니다 .


"작동하지 않는"의 의미를 명확히 할 수 있습니까? 힘내 특정 오류가 발생합니까, 아니면 null 효과가 있습니까?
vcsjones

죄송 해요. 예, 기본적으로 서버, git 저장소에 SSH로 연결하고 git branch -l 을 실행 하여 분기를 나열하면 다른 분기 만 표시됩니다. 그러나 git push production +1.0.0 : master 는 push했는데, 다시 밀어 넣을 때 Everything to up- todate 라고 표시 되지만 원격 서버에는 마스터 분기가 표시되지 않습니다.
Michael van Rooijen

5
수락 된 답변을 변경해야합니다. 두 번째 대답은 허용 된 것으로 표시된 것보다 훨씬 간단합니다.
Pedro Rolo

답장을 늦게 보내서 미안해. 동의하며 이제 수락 된 답변을 변경했습니다.
Michael van Rooijen

1
@MichaelvanRooijen 선택한 답변이 실제로이 문제 어떻게 해결 하는지 이해하지 못합니다 . 태그로 분기를 덮어 쓰지 않고 단지 태그를 원격으로 푸시합니다.

답변:


61

1.0.0주석이 달린 태그 이므로 실패했을 수 있습니다. 다음과 같은 오류 메시지가 표시되었을 수 있습니다.

오류 : 커밋되지 않은 객체를 분기 심판 / 헤드 / 마스터에 쓰려고합니다.

주석이 달린 태그에는 태그가 지정된 커밋 객체를 가리키는 고유 한 유형의 객체가 있습니다. 분기는 유용하게 객체를 태그 할 수 없으며 객체를 커밋 만합니다. 주석이 달린 태그를 다시 벗겨내어 객체를 커밋하고 대신 밀어야합니다.

git push production +1.0.0^{commit}:master
git push production +1.0.0~0:master          # shorthand

이 경우에도 작동하는 또 다른 구문이 있지만, 태그 객체가 커밋 이외의 것을 가리키는 경우 (또는 커밋을 가리키는 태그 객체 (...를 가리키는 태그 객체)의 경우 약간 다른 의미입니다) .

git push production +1.0.0^{}:master

구문 박리 이러한 태그에 기술되어 자식 반전 파싱 (1) 아래에 지정 개정 .


1
이것은 문제를 해결했다! 그러나 마스터 브랜치는 이미 존재해야합니다. 그러나 이것은 내 문제가 아닙니다. 도와 주셔서 정말로 고맙습니다!
Michael van Rooijen

2
@ 마이클 : 아. 예, 마스터 가없는 경우 (브랜치 또는 태그로), 브랜치 대신 mastergit push rep +tag:master 라는 태그를 만듭니다 . ( 마스터 가 브랜치 또는 태그로 존재하지 않는 경우 )는 "오류 : 규정되지 않은 대상으로 푸시 할 수 없습니다"와 함께 실패합니다. 마스터 브랜치 / 태그가 존재 하기 전에 원하는 것을 수행 한 명령 은 ( 브랜치가 저장되는 네임 스페이스)입니다. git push rep +tag~0:mastergit push rep +tag~0:refs/heads/masterrefs/heads/
Chris Johnsen

큰! 그것은 놀랍게 잘 나를 도울 것입니다. 매우 편리합니다! 해당 정보를 게시 해 주셔서 감사합니다.
Michael van Rooijen

4
@brad : ~{commit}문법은 문자 그대로입니다 (즉, 항상 9 자). 여기서 단어 commit는 자리 표시자가 아닙니다.
Chris Johnsen

1
그래! 죄송합니다. 당신이 특정 커밋을하려고한다고 생각하고있었습니다.
brad

469
git push --tags production

4
태그가 리모컨에 이미 있으면를 사용하여 먼저 원격 태그를 삭제해야합니다 git push production :1.0.0.
존중 TheCode

1
어떤 경우에 같은 이름의 분기가 '1.0.0'인 경우이 푸시는 더 잘 사용되지 않습니다 : git push production :refs/tags/1.0.0태그 만 삭제
Vladimir

1
@Nerian : 태그를 밀어 넣는 것 같습니다
bstpierre

5
이 방법을 사용하면 분기로 태그를 강제로 덮어 쓰는 것에 대한 원래 포스터의 문제를 실제로 어떻게 해결할 수 있습니까? 이렇게하면 모든 태그가 리모컨에 푸시되고 분기를 덮어 쓰지 않습니다.

1
하나의 태그 를 푸시하는 방법을 묻는 질문이 아니 십니까? 이 명령은 그보다 훨씬 더 많은 일을합니다.
Chris Martin

61

다음과 같이 태그를 만든 다음 GitHub에 푸시합니다.

git tag -a v1.1 -m "Version 1.1 is waiting for review"
git push --tags

Counting objects: 1, done.
Writing objects: 100% (1/1), 180 bytes, done.
Total 1 (delta 0), reused 0 (delta 0)
To git@github.com:neoneye/triangle_draw.git
 * [new tag]         v1.1 -> v1.1

4
그것은 모든 태그를 밀어
DAWID 할 Drozd

2
이렇게하면 태그로 분기를 덮어 쓰는 것에 대한 원래 포스터의 문제를 실제로 해결할 수 없으며 분기에 영향을주지 않고 태그를 원격으로 푸시하기 만합니다.

10

단일 태그를 푸시하는 경우 : git push <reponame> <tagname>

예를 들어 git push production 1.0.0. 태그는 브랜치에 바인딩되지 않고 커밋에 바인딩됩니다.

마스터 브랜치에서 태그의 컨텐츠를 원할 경우 머신에서 로컬로 수행하십시오. 지역 마스터 지점에서 계속 개발한다고 가정합니다. 그렇다면 git push origin master충분해야합니다.


5
이렇게하면 실제로 분기로 태그를 덮어 쓰는 것에 대한 원래 포스터의 문제를 해결할 수 없으며 분기에 영향을주지 않고 태그를 원격으로 푸시하기 만합니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.