Git에서 이전 커밋에 태그를 지정하는 방법은 무엇입니까?


949

우리는 git을 처음 사용하고, 저장소의 시작 부분에 태그를 설정하고 싶습니다. 우리의 프로덕션 코드는 시작 리포지토리와 동일하지만 그 이후 커밋을했습니다. 처음에 태그를 사용하면 생산을 알려진 안정적인 상태로 "롤백"할 수 있습니다.

그렇다면 임의의 오래된 커밋에 태그를 추가하는 방법은 무엇입니까?


나는 로컬 및 원격에 결국 오래된 태그를 삭제 도움을 찾고 여기 온도 다른 사람이 유용하게, 어쩌면 도움이됩니다 사람을 발견 gist.github.com/mobilemind/7883996
알렉산더 Lidtke

1
Git을 사용하여 태그를 원격 저장소에 푸시하는 방법을 잊지 마십시오 . Git은 특별한 것을하지 않으면 태그를 푸시하지 않기 때문입니다.
jww

커밋 해시를 사용하여 이전 커밋에 태그를 추가 할 수 있습니다. 그 구문은 다음과 같습니다. git tag -a <tagName> -m "tag message"<commit hash> 기본에서 고급에 대한 참조는 다음과 같습니다. abhisheksharma.online/git-tags
Abhishek Sharma

답변:


1510

예:

git tag -a v1.2 9fceb02 -m "Message here"

9fceb02커밋 ID의 시작 부분은 어디에 있습니까 ?

그런 다음을 사용하여 태그를 누를 수 있습니다 git push origin v1.2.

git log현재 브랜치에 모든 커밋 ID를 표시 할 수 있습니다 .

Pro Git 책에는 태그 지정 에 관한 장도 있습니다.

경고 : 현재 날짜로 태그를 생성합니다 (예 : GitHub 릴리스 페이지에 해당 값이 표시됨). 커밋 날짜로 태그 날짜를 지정하려면 다른 답변을보십시오 .


45
gitk의 오른쪽 클릭 메뉴에서이 작업을 수행 할 수도 있습니다. 그래도 SHA1을 찾는 방법이 편리합니다.
Cascabel

62
메시지를 추가하지 않으려면 -a-m "Message here"부품을 생략하십시오 .git tag v1.2 9fceb02
devius

3
전체 커밋 ID도 사용할 수 있습니다.
j08lue

1
@devius 사용의 차이 무엇 -a-m. 매뉴얼 페이지 는 사용될 -a때 암시 적으로 보인다 -m.
John Strood

7
git push --tags origin master로컬 지점의 모든 태그를 원격으로 푸시합니다. 선호 git push origin <tag_name>방금 생성 된 태그를 밀어. 참조 : stackoverflow.com/a/5195913/452708 , git-scm.com/book/en/v2/Git-Basics-Tagging
Abhijeet

144

코드 만

# Set the HEAD to the old commit that we want to tag
git checkout 9fceb02

# temporarily set the date to the date of the HEAD commit, and add the tag
GIT_COMMITTER_DATE="$(git show --format=%aD | head -1)" \
git tag -a v1.2 -m"v1.2"

# set HEAD back to whatever you want it to be
git checkout master

세부

@dkinzer의 답변 은 커밋 날짜가 아닌 현재 날짜 ( git tag명령을 실행할 때) 인 태그를 만듭니다 . Git 도움말 에는 "Backingating Tags" 섹션이 있습니다 .tag

다른 VCS에서 일부 변경 사항을 가져오고 작업의 주요 릴리스에 대한 태그를 추가하려는 경우 태그 오브젝트에 임베드 할 날짜를 지정할 수 있습니다. 태그 객체의 이러한 데이터는 예를 들어 gitweb 인터페이스의 태그 순서에 영향을줍니다.

향후 태그 객체에 사용되는 날짜를 설정하려면 환경 변수를 설정 GIT_COMMITTER_DATE하십시오 (나중에 가능한 값에 대한 설명을 참조하십시오. 가장 일반적인 형식은 "YYYY-MM-DD HH : MM").

예를 들면 다음과 같습니다.

$ GIT_COMMITTER_DATE="2006-10-02 10:31" git tag -s v1.0.1

"Git에서 태그하는 방법" 페이지 는 다음을 통해 HEAD 커밋 시간을 추출 할 수 있음을 보여줍니다.

git show --format=%aD  | head -1
#=> Wed, 12 Feb 2014 12:36:47 -0700

다음을 통해 특정 커밋 날짜를 추출 할 수 있습니다.

GIT_COMMITTER_DATE="$(git show 9fceb02 --format=%aD | head -1)" \
git tag -a v1.2 9fceb02 -m "v1.2"

그러나 커밋을 두 번 반복하는 대신 HEAD를 해당 커밋으로 변경하고 두 명령 모두에서 암시 적으로 사용하는 것이 더 쉬워 보입니다.

git checkout 9fceb02 

GIT_COMMITTER_DATE="$(git show --format=%aD | head -1)" git tag -a v1.2 -m "v1.2"

4
@ColonelPanic, 당신의 소원은 나의 명령입니다! github.com/lucasrangit/git-custom-commands/blob/master/…
Lucas

Github을 사용하여 릴리스를 관리하고 프로젝트 / tags 페이지에 표시된 날짜를 신경 쓰면 GIT_COMMITTER_DATE를 설정하는 것이 특히 중요합니다!
Lesley

2
@ColonelPanic 나는 당신에게 말장난에 대한 찬성을 주었고, 나는 당신에게 코드에 대한 두 번째 것을 줄 수 있기를 원하지만 github 스타는해야 할 것입니다.
andyhasit

96

이를 수행하는 가장 간단한 방법은 다음과 같습니다.

git tag v1.0.0 f4ba1fc

f4ba1fc태그에 원하는 커밋의 해시의 시작 인과 v1.0.0당신이 태그에 원하는 버전 인.


감사합니다 :).
Saleh Enam Shohag


36

OK , 당신은 간단하게 할 수 있습니다 :

git tag -a <tag> <commit-hash>

따라서 commit : to 태그 를 추가하려면 다음을 e50f795수행하십시오.

git tag -a 1.0.2 e50f795

또한 다음을 사용하여 마지막에 메시지추가-m 하십시오.

git tag -a 1.0.2 e50f795 -m "my message"

결국, 당신은 그것을하기 위해 푸시해야합니다 remote.

git push origin 1.0.2 

태그를 하나씩 언급하고 싶지 않은 태그가 많은 경우 간단히 다음을 수행하십시오.

git push origin --tags

모든 태그를 함께 밀어 넣으려면 ...

또한 단계를 더 명확히하기 위해 아래 이미지에 단계를 만들었습니다. 커밋 해시에서 태그 생성

Hub 에서 태그를 추가 하거나 SourceTree 와 같은 도구를 사용 하여 이전 단계를 피하기 위해이 경우 Bitbucket 에 로그인 하여 거기에서 수행 할 수 있습니다.

  1. 지점으로 가서 태그를 추가하려는 커밋 을 찾아 클릭하십시오.

비트 버킷에서 커밋 찾기

  1. (가)에서 페이지를 커밋 , 그것이 말하는 곳 오른쪽에, 발견 No tags하고 클릭 +아이콘 :

태그가없는 곳을 찾으십시오.

  1. 태그 이름 상자에 태그를 추가하십시오.

태그 이름 추가

  1. 이제 태그가 성공적으로 생성되었음을 알 수 있습니다.

여기에 이미지 설명을 입력하십시오


11

이것은 오래된 질문이며 대답은 이미 모든 작업에 주어졌지만 고려할 수있는 새로운 옵션도 있습니다.

SourceTree를 사용하여 git 저장소를 관리하는 경우 커밋을 마우스 오른쪽 버튼으로 클릭하고 태그를 추가 할 수 있습니다. 다른 마우스 클릭으로 태그를 원점으로 바로 보낼 수도 있습니다.


6

다른 사람들의 대답을 바탕으로 태그 날짜를 실제로 발생한 날짜로 설정하고 주석이 달린 태그를 사용하며 필요하지 않은 단일 라이너 솔루션이 있습니다 git checkout.

tag="v0.1.3" commit="8f33a878" bash -c 'GIT_COMMITTER_DATE="$(git show --format=%aD $commit)" git tag -a $tag -m $tag $commit'
git push --tags origin master

여기서 tag원하는 태그 문자열과 commit커밋 해시로 설정됩니다.


3

@Phrogz 의 대답 은 훌륭하지만 Windows에서는 작동하지 않습니다. Powershell을 사용하여 커밋의 원래 날짜로 이전 커밋에 태그를 지정하는 방법은 다음과 같습니다.

git checkout 9fceb02
$env:GIT_COMMITTER_DATE = git show --format=%aD | Select -First 1
git tag v1.2
git checkout master
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.