본문 바로가기
utils/git and github

[Git] tag: 특정 commit 을 가리키는 별명.

by ds31x 2024. 1. 1.

git tag

tag는
특정 commit에 붙이는 별명
해당하는 이름임.

  • 특정 commit을 가르키는 포인터라고 생각하면 됨.
  • release 등 을 할 경우, tag는 v1.0.0 등으로 명명됨.
  • 해당 tag를 통해 프로젝트의 특정 시점의 snapshot을 쉽게 가져올 수 있음
    • commit id 로도 가능하지만, hash 값은 실제적으로 기억이 불가능
    • 반면 tag는 쉽게 기억할 수 있는 의미있는 이름으로 주어지며, 때문에 보다 쉽게 사용가능함.
  • tag로 restore를 할 경우, 그 상태로는 추가적인 변경 후 commit 작성이 안 됨(배포용)
    • tag는 단순한 commit의 포인터일 뿐 branch가 아님.
    • 때문에 추가 commit을 작성하려면, 해당 tag를 기준으로 새 branch를 만들어야 함.

Tag 종류

Git에서는

  • Lightweight Tag
  • Annotated Tag로 두 종류가 있음.

Lightweight Tag

  • 특정 커밋에 대한 단순 포인터.
  • TAG에 대한 부가적인 정보없이 관련 commit의 checksum값만 가짐.

 


Annotated Tag

  • Git 데이터베이스에 tag를 만든 사람의 이름, 이메일과 만든 날짜, 그리고 tag message도 저장.
  • GPG(GNU Privacy Guard)로 서명도 가능.

일반적으로 Annotated 태그를 만들어 이 모든 정보를 사용할 수 있도록 하는 것을 권장하지만,
임시로 생성하는 tag거나 이러한 정보를 유지할 필요가 없는 경우에는 Lightweight 태그를 사용한다.


기본 사용법

기본적인 tag 관련 사용법은 아래와 같음. 단, remote repository와 관련된 사용법은 좀 더 아래에서 다룸.


tag 조회

현재 존재하는 Tag 들의 리스트를 조회함.

$ git tag
  • 해당 option은 알파벳 순으로 보여준다.(시간순 아님)

다음과 같이 -l 을 통해 검색패턴을 사용할 수도 있음.

$ git tag -l "v1.8.5*"
v1.8.5
v1.8.5-rc0

Annotated tag 만들기.

다음의 예는 annotated tag를 만드는 방법을 보여줌.

git tag -a v1.0.0 -m “my version 1.0”

 

위의 경우는 현재 최종 commit에 tag v1.0.0 이라는 이름의 annotated tag를 달게 됨.

  • git show 를 이용하여 해당 정보와 관련 commit 정보를 확인 가능함.
  • -a : --annotate 를 의미.
    • Lightweight tag를 만들 때는 -a 등의 옵션 없이 tag명만 인자로 줌.
  • -m : commit에서 comment를 남기는 옵션과 같음. 주어지지 않을 경우 editor가 열림.

-a 로 주어진 tag 이름 뒤에, 대상이 되는 commit을 가르키는 commit id (hash value or hash key)가 주어질 경우,
해당 commit에 tag를 달게 됨.

git tag -a v1.1.0 9fceb02

Lightweight tag 만들기.

다음과 같이 옵션없이 처리하면 Lightweight tag가 만들어짐.

git tag v1.0.0

tag 삭제.

다음처럼 -d 를 통해 특정 tag삭제가 가능함.

git tag -d <tag_name>
  • 지정한 태그를 삭제.

tag의 상세정보 확인.

다음처럼 show 를 이용함.

git show <tag_name>
  • Tag의 상세정보 확인.

지정된 tag에 해당하는 상태로 working tree를 되돌리기.

이는 다음과 같이 checkout을 통해 이루어짐.

git checkout <tag_name>
  • 이 상태에서 수정을 해도 commit이 적용되지 않음.
  • 수정을 하려면, 수정 한 상태에서 branch를 새로 생성하여 commit 해주는 추가 처리 필요함.

위의 방법은 이전 git의 방법으로 switch를 이용한 다음의 방법을 추천함.

  • git switch -c <branch_name> <tag_name>
  • 를 통해 해당 tag_name 을 가지는 tag 기반으로 branch를 새로 생성하여 작업하는게 편함.

2023.12.30 - [utils/git and github] - [git] branch : branch를 생성하거나 확인 또는 삭제 및 변경

 

[git] branch : branch를 생성하거나 확인 또는 삭제 및 변경

branch : Branch를 생성하거나 확인하는 명령. branch 확인 아래와 같이 인자 없이 수행할 경우, 현재 존재하는 branch들을 보여줌. 기본적으로 main (과거엔 master) 라는 branch가 존재함. *표시는 현재 작업

ds31x.tistory.com


Remote repository에서의 tag 관련 작업

원격지의 tag들을 local 로 가져올 수도 있고, 원격지 에서만을 지울 수도 있음.


local repository의 tag를 remote repository에 올리기(synchronization)

이는 push를 통해 이루어지는데, 일반적인 git push로는 tag 정보는 전송되지 않음.

다음과 같이 push 를 tag 정보 전송을 위해 지정해야함.

git push <remote_respository_name> <target_tag>
  • <remote_respository_name> 은 주로 origin 임.

여러 tags를 한번에 push 하려면 다음과 같이 --tags를 사용.

git push <remote_repository_name> --tags

remote respository에서 tag 삭제하기.

역시 push를 사용하지만, 삭제를 의미하는 --delete 옵션과 함께 사용됨.

git push --delete <remote_respository_name> <tag_name>
  • <remote_repository_name> 은 일종의 alias로 origin으로 주로 사용됨.
  • 위의 명령어로는 remote repository에서만 삭제됨.

remote repository에서 tag 정보 가져오기.

  • git fetch 를 수행하면 tag 정보 및 branch 정보를 포함하여 local repository로 가져옴.
  • 만약 tag 정보만 필요한 경우, --tags 옵션을 추가한다.
git fetch --tags

같이 읽어보면 좋은 자료들

2024.05.20 - [utils/git and github] - [Git] Git Summary (작성중)

 

[Git] Git Summary (작성중)

git이란2024.05.20 - [utils/git and github] - Git : 소개 git 설치 후 해줘야 하는 작업들[Git] git 설치 후 우선 해줘야 하는 작업들 (tistory.com)local repository 초기화2024.05.20 - [utils/git and github] - [Git] init : local rep

ds31x.tistory.com