Original article: Git Tag Explained: How to List, Create, Remove, and Show Tags in Git

Git 태그에 대한 설명: Git에서 태그를 나열, 생성, 제거 및 표시 방법

태그 지정(Tagging)을 통해 개발자는 프로젝트 개발 과정에서 중요한 체크포인트를 표시할 수 있습니다. 예를 들어, 소프트웨어 릴리즈 버전에 태그(Tag)를 지정할 수 있습니다. (예: V1.3.2) 기본적으로 커밋에 특별한 이름(태그)을 부여할 수 있습니다.

생성된 모든 태그를 알파벳 순으로 보려면:

git tag

태그에 대한 자세한 정보를 얻으려면:

git show v1.4

태그에는 두 가지 유형이 있습니다:

주석이 달린 태그

git tag -a v1.2 -m "my version 1.4"

경량 태그

 git tag v1.2

두 유형은 저장되는 방식이 다르며 현재 커밋에 태그를 생성합니다.

이전 커밋에 태그를 지정하려는 경우, 태그할 커밋 아이디를 지정합니다.

 git tag -a v1.2 9fceb02

커밋을 체크아웃과 원격 저장소에 푸시하는 동안, 커밋 아이디 대신 태그 이름을 사용할 수 있습니다.

추가 정보:

git tag 명령을 사용해 프로젝트에서 사용할 수 있는 모든 태그를 나열할 수 있습니다. (알파벳 순으로 표시됨)

$ git tag
v1.0
v2.0
v3.0

이러한 태그 나열 방법은 작은 프로젝트에 유용하지만, 대규모 프로젝트에는 수백 개의 태그가 있을 수 있으므로, 기록에서 중요한 지점을 검색할 때 태그를 필터링해야 할 수 있습니다. git tag 명령어에 -l을  추가해 특정 문자가 포함된 태그를 찾을 수 있습니다.

$ git tag -l "v2.0*"
v2.0.1
v2.0.2
v2.0.3
v2.0.4

태그 생성하기

주석이 달린 태그와 경량 태그의 두 가지 유형을 만들 수 있습니다. 첫 번째 방법은 GIT 데이터베이스에서 객체를 놓고 경쟁하는 것입니다. 체크섬이 지정되고, 메시지(예: 커밋)가 필요하며, 이름, 이메일 및 날짜와 같은 기타 중요한 데이터를 저장합니다. 반면에 경량 태그는 메시지가 필요하거나 다른 데이터를 저장하지 않고, 프로젝트의 특정 지점에 대한 포인터 역할만 합니다.

주석 달린 태그 생성하기

주석 달린 태그를 생성하기 위해, git tag 명령어에 -a tagname -m "tag message"를 추가합니다.

$ git tag -a v4.0 -m "release version 4.0"
$ git tag
v1.0
v2.0
v3.0
v4.0

보시다시피, -a는 주석이 달린 태그를 생성하고 있음을 지정하고, 그 뒤에 태그 이름이 오고, 마지막으로 -m 뒤에는 GIT 데이터베이스에 저장할 태그 메시지가 뒤따릅니다.

경량 태그 생성하기

경량 태그는 커밋 체크섬만 포함됩니다. (다른 정보는 저장되지 않음). 하나를 생성하려면, 다른 옵션 없이 git tag 명령어를 실행하기만 하면 됩니다(이름 끝에 있는 -lw 문자는 경량 태그를 나타나는 데 사용되지만, 원하는 대로 표시할 수 있습니다.):

$ git tag v4.1-lw
$ git tag
v1.0
v2.0
v3.0
v4.0
v4.1-lw

이번에는 메시지나 기타 관련 데이터를 지정하지 않았으므로 태그에는 오직 참고된 커밋의 체크섬만 포함됩니다.

태그 데이터 보기

git show 명령을 실행하면 태그에 저장된 데이터를 볼 수 있습니다. 주석이 달린 태그의 경우, 태그 데이터와 커밋 데이터가 표시됩니다.

$ git show v4.0
tag v4.0
Tagger: John Cash <john@cash.com>
Date:   Mon Sat 28 15:00:25 2017 -0700

release version 4.0

commit da43a5fss745av88d47839247990022a98419093
Author: John Cash <john@cash.com>
Date:   Fri Feb 20 20:30:05 2015 -0700

  finished details

경량 태그를 보고 있을 때, 참조된 커밋 데이터만 표시됩니다.

$ git show v1.4-lw
commit da43a5f7389adcb9201ab0a289c389ed022a910b
Author: John Cash <john@cash.com>
Date:   Fri Feb 20 20:30:05 2015 -0700

  finished details

이전 커밋에 태그 지정하기

깃 태그 커밋을 이용해 과거 커밋에 태그를 지정할 수도 있습니다. 커맨드 라인에 커밋의 체크섬(혹은 최소한 그 일부)을 지정해야 합니다.

먼저 필요한 커밋의 체크섬을 찾기 위해 깃 로그를 실행합니다:

$ git log --pretty=oneline
ac2998acf289102dba00823821bee04276aad9ca added products section
d09034bdea0097726fd8383c0393faa0072829a7 refactorization
a029ac120245ab012bed1ca771349eb9cca01c0b modified styles
da43a5f7389adcb9201ab0a289c389ed022a910b finished details
0adb03ca013901c1e02174924486a08cea9293a2 small fix in search textarea styles

필요한 체크섬이 있으면, 태그 생성 행 끝에 추가합니다:

$ git tag -a v3.5 a029ac

git tag를 실행해 태그가 올바르게 추가됐는지 확인할 수 있습니다:

$ git tag
v1.0
v2.0
v3.0
v3.5
v4.0
v4.1-lw

태그 푸시하기

깃 푸쉬 명령을 실행할 때 깃은 기본적으로 태그를 푸시하지 않습니다. 따라서 서버에 태그를 성공적으로 푸시하려면 git push origin 명령을 실행해야 합니다.

$ git push origin v4.0
Counting objects: 14, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (16/16), done.
Writing objects: 100% (18/18), 3.15 KiB | 0 bytes/s, done.
Total 18 (delta 4), reused 0 (delta 0)
To git@github.com:jcash/gitmanual.git
 * [new tag]         v4.0 -> v4.0

git push origin 명령어에 --tags 옵션을 사용해 여러 태그를 한 번에 추가할 수도 있습니다:

$ git push origin --tags
Counting objects: 1, done.
Writing objects: 100% (1/1), 160 bytes | 0 bytes/s, done.
Total 1 (delta 0), reused 0 (delta 0)
To git@github.com:jcash/gitmanual.git
 * [new tag]         v4.0 -> v4.0
 * [new tag]         v4.1-lw -> v4.1-lw

태그 채킹하기

평소처럼 git checkout을 사용해 태그를 체크아웃할 수 있습니다.
그러나 이 경우 HEAD 상태가 분리될 수 있습니다.

$ git checkout v0.0.3
Note: checking out 'v0.0.3'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

태그 삭제하기

특정 태그를 삭제하고 싶은 상황이 있을 수 있습니다. 이때 다음과 같은 유용한 명령어를 사용합니다:

$ git tag --delete v0.0.2
$ git tag
v0.0.1
v0.0.3
v0.0.4

추가 정보

출처

깃 문서: 태그(영문)