개요
최근 소스 레포지터리의 특정 태그 버전으로 이동해야 하는 일이 있었는데, 방법을 잘 모르고 있어서 적어둔다.
Tag
무언가를 표시할 때 사용하는 태그는 Git에서도 중요한 특정 커밋을 표시하기 위해서 사용한다. 즉, 커밋을 가리키는 링크와 비슷한데, 보통 v1.0.0, v1.1.0 등으로 릴리즈를 할 때 사용한다.
태그에는 Lightweight, Annotated라는 두 가지 종류가 존재한다. Lightweight 태그는 단순 특정 커밋에 대한 포인터에 해당하는 반면, Annotated 태그는 태그 생성자의 이름, 이메일, 태그 생성일, 태그 매시지 등을 Git 데이터베이스에 저장한다. 일반적으로 태그를 생성할 때는 Annotated 태그로 생성하여 사용한다.
태그 생성
태그는 git tag 명령으로 생성할 수 있다.
Lightweight 태그
태그 생성 시 아무 옵션을 지정하지 않고 생성한다.
git tag <TAG_NAME>
## 예시
git tag v0.0.9
Annotated 태그
Annotated 태그는 -a 옵션을 붙여 생성하며, 메시지를 지정할 때는 -m 옵션을 사용한다.
git tag -a <TAG_NAME> -m <MESSAGE>
## 예시
git tag -a v1.0.0.-m "tag test"
참고로 Lightweight, Annotated 태그 모두 특정 커밋을 지정하여 태그를 생성할 수 있고, 생성한 태그는 commit과 동일하게 push를 해야 원격지에 반영된다.
git push origin <TAG_NAME>
태그 조회
생성한 태그는 git tag 명령어로 확인할 수 있다.
git tag
태그는 알파벳 순서로 출력된다.
다만 태그가 어떤 종류의 태그인지 확인할 수가 없는데, 아래 명령어를 사용하면 태그가 가리키는 커밋 정보를 확인할 수 있게 된다.
git show-ref --tags --dereference
Lightweight는 커밋 번호를 바로 가리키고 있는 반면, Annotated는 자체 메시지 등의 데이터를 가진 객체이기 때문에 커밋 번호와 태그 번호로 분리되어 있다. '태그 이름'이 가리키는 것이 태그 번호이고, '태그 이름^{}'이 가리키는 것이 커밋 번호에 해당된다.
특정 태그로 이동
작업 디렉터리를 특정 태그로 이동할 때는 checkout 명령을 사용하여 이동할 수 있다. -b 옵션을 사용하여 새로 브랜치를 생성할 수도 있다.
git checkout <TAG_NAME>
git checkout -b <BRANCH_NAME> <TAG_NAME>
참고로 브랜치를 생성하지 않으면 detached HEAD 상태가 되기 때문에 별도 작업이 필요한 경우에는 브랜치를 생성하는 것이 좋겠다.
태그 삭제
태그는 -d 옵션을 사용하여 삭제할 수 있다.
git tag -d <TAG_NAME>
## 예시
git tag -d v0.0.9
참고 문서
https://git.jiny.dev/text/tag/10.7.html
[GIT] ⚡️ 태그 기능 및 사용법 (git tag)