13: 태그하기(git tag)

2 minute read

특정 커밋에 태그를 할 수 있습니다. tag 란 ‘꼬리표’로 특정 시점을 별도로 저장하는 기능입니다. 보통 특정 버전을 출시할 때 사용합니다(v1.0 등).

Tag 조회하기(git tag)

git tag 명령어로 이미 존재하는 태그 목록을 확인할 수 있습니다.

$ git tag
v1.0
v1.3
v2.0

검색 옵션을 추가할 수 있습니다. 만약 v1.8.5 버전의 태그들만 검사하고 싶으면 다음과 같이 실행합니다:

$ git tag -l "v1.8.5*"
v1.8.5
v1.8.5-rc0
v1.8.5-rc1
v1.8.5-rc2
v1.8.5-rc3
v1.8.5.1
v1.8.5.2
v1.8.5.3
v1.8.5.4
v1.8.5.5

Tag 붙이기

Annotated 태그

Git 데이터베이스에 태그를 만든 사람 이름, 이메일, 태그를 만든 날짜, 태그 메세지를 저장합니다. -a 옵션을 추가하여 git tag를 실행하면 됩니다. 그리고 메세지를 저장할 때는 커밋을 만들 때와 같은 방법을 -m 옵션을 추가하시면 됩니다. (만약 -m 옵션을 주지 않는다면 git은 에디터를 실행시킵니다.)

$ git tag -a v1.4 -m "my version 1.4"
$ git tag
v0.1
v1.3
v1.4

Lightweight 태그

Lightweight 태그는 위의 annotated 태그와 달리 다른 정보들을 저장하지 않고, 브랜치의 포인터처럼 해당 커밋을 가리키는 하나의 포인터를 만듭니다. 하지만, 이 포인터는 HEAD 처럼 최신 커밋으로 이동하지 않습니다. 아무런 옵션 없이 git tag를 사용하시면 됩니다.

$ git tag v1.4-lw
$ git tag
v0.1
v1.3
v1.4
v1.4-lw
v1.5

Note

커밋의 해시정보를 이용하면 이전 커밋에 대한 태그도 할 수 있습니다. $ git tag -a v1.2 9fceb02와 같이 할 경우 9fceb02의 커밋에 v1.2의 태그를 추가합니다.

태그 정보 확인하기(git show)

git show <tag> 를 실행하여 해당 태그에 있는 커밋의 정보를 확인할 수 있습니다. 태그의 종류에 따라 출력 메세지가 다릅니다. Annotated 태그의 경우 태그에 저장된 정보들도 같이 보여주지만, Lightweight 태그는 커밋의 정보만 보여줍니다.

# Annotated Tag
$ git show v1.4
tag v1.4
Tagger: Ben Straub <ben@straub.cc>
Date:   Sat May 3 20:19:12 2014 -0700

my version 1.4

commit ca82a6dff817ec66f44342007202690a93763949
Author: Scott Chacon <schacon@gee-mail.com>
Date:   Mon Mar 17 21:52:11 2008 -0700

changed the version number
# Lightweight Tag
$ git show v1.4-lw
commit ca82a6dff817ec66f44342007202690a93763949
Author: Scott Chacon <schacon@gee-mail.com>
Date:   Mon Mar 17 21:52:11 2008 -0700

changed the version number

태그 공유하기(git push)

앞에서 배운 git push 명령은 자동으로 리모트 저장소에 태그를 전송하지 않습니다. 태그를 만들었으면 서버에 별도로 push 해야 합니다. 이는 브랜치를 공유하는 것과 같은데 뒤에서 다루도록 하겠습니다. git push <branch> <tag>를 실행합니다.

$ git push origin v1.5
Counting objects: 14, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (12/12), done.
Writing objects: 100% (14/14), 2.05 KiB | 0 bytes/s, done.
Total 14 (delta 3), reused 0 (delta 0)
To git@github.com:schacon/simplegit.git
* [new tag]         v1.5 -> v1.5

여러 개의 태그를 한 번에 push 하고 싶으면 다음과 같이 --tags 옵션을 추가하시면 됩니다:

$ git push origin --tags

태그를 Checkout 하기(git checkout )

태그가 특정 버전을 가리키고 있고, 특정 버전의 파일로 이동하고 싶다면 다음과 같이 git checkout 명령어를 사용하면 됩니다:

$ git ckecout 2.0.0

주의하실 점은 HEAD가 이동하는 것이 아닙니다. 따라서 특정 버전으로 이동한 뒤, 새롭게 커밋을 진행하면 그 커밋으로 이동할 수 있는 포인터가 존재하지 않아 해당 커밋의 해시 정보를 이용하지 않는 한 이동할 수 없습니다. 이와 같이 과거의 시점에서 다시 브랜치를 만들어 커밋을 진행하고 싶은 경우 git checkout -b <branch> <tag> 명령어를 사용할 수 있습니다:

$ git checkout -b version2 v2.0.0
Switched to a new branch 'version2'

Leave a comment