태그와 버전
3. 코드 예제
예제 1: 주석 태그 만들고 목록·show·describe 로 읽기 — 01_tag_version.sh 발췌
tag_at v1.0.0 "릴리스 1.0.0: 인사말 기능"
git show v1.0.0 | head -4
# (로그아웃 기능 커밋 후)
tag_at v1.1.0 "릴리스 1.1.0: 로그아웃 기능"
git tag -l 'v1.*'
# (프로필 편집, 버그 수정 커밋 후)
git describe --tagstag v1.0.0
Tagger: kim <[email protected]>
Date: Mon Jan 5 09:01:00 2026 +0900
v1.0.0
v1.1.0
v1.1.0-2-g400dfcdv1.0.0 은 주석 태그라 태거와 날짜가 남습니다. v1.1.0 이후 커밋이 두 개 더 있어서 describe 가 거리 2 를 붙여 보여줍니다.
예제 2: bare 원격에 push --follow-tags — 01_tag_version.sh 발췌
git push -q -u origin main
git ls-remote --tags origin
git config push.followTags true
git push -q origin v1.1.0
git ls-remote --tags origin258751b112dd7bbfe33ad8649fe6808cba56e48f refs/tags/v1.0.0
e8028e231beae8ca5666740d5a03a037b68e918a refs/tags/v1.0.0^{}
a97625197dc66fee2bbc7ef9b5b29b0738998fbb refs/tags/v1.1.0
5e3347bed1456370a39039872877098a066e9bd9 refs/tags/v1.1.0^{}main 을 push 한 직후 첫 ls-remote --tags 는 빈 결과였습니다(그래서 위 출력에 없습니다). v1.1.0 하나만 지정해서 push 했지만 push.followTags 가 켜져 있어 그 조상인 v1.0.0 까지 함께 올라갔습니다. ^{} 로 끝난 줄은 태그가 실제로 가리키는 커밋입니다.
예제 3: archive 로 소스 반출 — 01_tag_version.sh 발췌
git archive --format=zip --prefix=app-1.1.0/ v1.1.0 \
-o app-1.1.0.zip
unzip -l app-1.1.0.zipArchive: WORK/app-1.1.0.zip
5e3347bed1456370a39039872877098a066e9bd9
Length Date Time Name
--------- ---------- ----- ----
0 2026-01-05 09:01 app-1.1.0/
6 2026-01-05 09:01 app-1.1.0/README.md
17 2026-01-05 09:01 app-1.1.0/greet.txt
20 2026-01-05 09:01 app-1.1.0/logout.txt
112 2026-01-05 09:01 app-1.1.0/pom.xml
--------- -------
155 5 fileszip 안에는 .git 폴더 없이 v1.1.0 시점의 파일만 들어 있습니다. Archive: 다음 줄의 해시는 git 이 남긴 원본 커밋 표시입니다.
예제 4: hotfix 브랜치에서 v1.1.1 붙이고 log 범위로 변경 목록 뽑기 — 01_tag_version.sh 발췌
git checkout -q -b hotfix/1.1.1 v1.1.0
# (로그아웃 널 체크 수정, 버전 1.1.1 커밋)
tag_at v1.1.1 "핫픽스 1.1.1: 널 포인터 수정"
git log v1.1.0..v1.1.1 --oneline
git checkout -q main
git merge -q --no-ff -m "머지: hotfix/1.1.1" hotfix/1.1.1
git tag -l 'v1.1.*'02a79da 릴리스 준비: 버전 1.1.1
504bda7 긴급 수정: 로그아웃 널 포인터 예외
v1.1.0
v1.1.1hotfix 브랜치를 v1.1.0 태그에서 바로 갈라서 수정 커밋 두 개만 얹었습니다. log v1.1.0..v1.1.1 범위가 정확히 그 두 커밋만 보여줍니다.