공공부하자개발 · 영어 학습 노트
협업·배포
Git버전 관리와 협업0/8 완료
  • 01저장소와 커밋
  • 02브랜치와 병합
  • 03되돌리기
  • 04원격 저장소
  • 05히스토리 정리
  • 06태그와 버전
  • 07협업 규칙
  • 08문제 해결
사이트 소개개인정보처리방침연락처
© 2026 공부하자
홈 › Git › 06 / 8

태그와 버전

섹션 7진행 0 / 8
1왜 배우는가2핵심 원리3코드 예제4응용 변형 예제5자주 하는 실수 (Tip)6연습 문제7정리‹ 이전다음 ›

2. 핵심 원리

2.1 태그는 커밋을 가리키는 고정 이름표

브랜치(branch)는 커밋을 만들 때마다 자동으로 최신 커밋을 따라 움직이는 포인터입니다. 태그(tag)는 만드는 순간 가리킨 커밋에 고정되고, 이후 커밋과 상관없이 그대로 남습니다.

2.2 경량 태그와 주석 태그

종류 명령 저장 정보 용도
경량 태그(lightweight) git tag 이름 커밋 해시만 임시 표시
주석 태그(annotated) git tag -a 이름 -m 메시지 작성자·날짜·메시지 배포용

경량 태그는 브랜치 파일 안에 커밋 해시 하나만 적어 둔 것과 같습니다. 배포 이력을 남겨야 하면 항상 주석 태그를 씁니다.

2.3 태그 조회

명령 동작
git tag / git tag -l 전체 목록
git tag -l 'v1.*' 패턴 필터
git tag -l -n1 이름 목록에 메시지 첫 줄 포함
git show 이름 태그(또는 커밋) 상세

show 는 주석 태그면 태거·날짜·메시지를 먼저 보여주고 그 아래에 가리키는 커밋을 보여줍니다. 경량 태그면 커밋 내용만 바로 나옵니다.

2.4 태그 삭제·이동·특정 커밋에 달기

명령 동작
git tag -d 이름 로컬 태그 삭제
git tag 이름 커밋해시 과거 커밋에 태그
git tag -f 이름 대상 태그를 다른 커밋으로 강제 이동

-f 로 옮기기는 아직 아무에게도 공유하지 않은 태그에만 씁니다. 이미 push 한 태그를 옮기면 동료의 로컬 태그와 가리키는 커밋이 달라집니다.

2.5 태그는 push 에 자동 포함되지 않음

명령 브랜치 전송 태그 전송
git push origin main O X
git push origin v1.1.0 X 지정 태그(및 도달 가능한 태그)
git push --tags origin X 전체 태그
git push --follow-tags origin main O 도달 가능한 주석 태그

git config push.followTags true 를 설정하면 git push 마다 --follow-tags 를 붙인 것과 같이 동작합니다. 경량 태그는 이 옵션으로도 전송되지 않고 주석 태그만 대상입니다.

2.6 유의적 버전(semver)

유의적 버전(Semantic Versioning)은 MAJOR.MINOR.PATCH 세 자리로 변경 폭을 알리는 규칙입니다.

자리 올리는 상황
MAJOR 호환이 깨지는 변경
MINOR 기능 추가(호환 유지)
PATCH 버그 수정만

버전만 보고도 "이번 업데이트를 그냥 받아도 되는지" 를 판단할 수 있게 하는 것이 목적입니다.

2.7 사전 릴리스와 빌드 메타데이터

v1.2.0-rc.1 처럼 하이픈 뒤에 붙은 부분은 사전 릴리스(pre-release) 표시입니다. 정식 배포 전 검증용 버전임을 나타내고, 우선순위는 1.2.0-rc.1 < 1.2.0 순입니다.

+ 뒤에 붙은 부분은 빌드 메타데이터로, v1.2.0+20260105 처럼 씁니다. 버전 비교에는 영향을 주지 않고 참고 정보로만 씁니다.

2.8 자바 프로젝트의 버전 흐름

메이븐(Maven) 프로젝트는 개발 중 버전 뒤에 -SNAPSHOT 을 붙입니다. 릴리스할 때만 그 표시를 떼고, 태그를 단 뒤 다시 다음 버전에 -SNAPSHOT 을 붙입니다.

text
1.1.0-SNAPSHOT (개발 중)
   │ pom.xml 버전을 1.1.0 으로 확정, 커밋
   ▼
1.1.0 (릴리스 커밋) ──tag──> v1.1.0
   │ pom.xml 버전을 1.2.0-SNAPSHOT 으로 올림
   ▼
1.2.0-SNAPSHOT (다음 개발)

태그는 이 흐름에서 "SNAPSHOT 표시가 없는 그 한 커밋" 만 가리킵니다.

2.9 describe 로 빌드 번호 읽기

git describe --tags 는 현재 커밋에서 가장 가까운 조상 태그를 찾아 그 뒤에 거리를 붙여 보여줍니다.

조각 의미
v1.1.0 가장 가까운 조상 태그
-2 그 태그 이후 커밋 수
-g400dfcd 현재 커밋의 짧은 해시(g는 git 표시)
-dirty (옵션) 커밋하지 않은 변경이 있음

--always 는 태그가 하나도 없을 때만 짧은 해시로 대체하는 옵션이라, 태그가 있으면 --tags 와 결과가 같습니다. --dirty 는 작업 트리에 변경이 남아 있으면 끝에 표시를 붙입니다.

2.10 태그로 배포본 확인하기

git checkout 태그 를 하면 HEAD 가 브랜치가 아니라 커밋을 직접 가리키는 분리된 HEAD(detached HEAD) 상태가 됩니다. 배포본이 맞는지 파일만 확인하고 원래 브랜치로 돌아오면 안전합니다.

이 상태에서 커밋을 계속 쌓으면 어느 브랜치에도 속하지 않아 나중에 찾기 어렵습니다. 뭔가 고쳐야 한다면 checkout -b 로 새 브랜치를 만들고 시작합니다.

2.11 archive 로 소스 반출

옵션 의미
--format=zip zip 으로 묶기(tar.gz 도 가능)
--prefix=app-1.1.0/ 압축 안 최상위 폴더 이름
-o 파일 결과 파일로 저장

git archive 는 .git 폴더 없이 지정한 태그 시점의 파일만 담습니다. zip 파일에는 원본 커밋 해시가 코멘트로 남아 나중에 어느 커밋에서 뽑았는지 확인할 수 있습니다.

2.12 릴리스 노트·릴리스 브랜치·hotfix

git log 태그A..태그B --oneline 은 두 태그 사이 커밋만 보여주고, git shortlog -sn 은 작성자별 커밋 수를 집계합니다. 둘 다 릴리스 노트 초안으로 씁니다.

버전을 안정화하는 동안에는 release/1.2 같은 릴리스 브랜치를 따로 두고, 검증이 끝나면 그 위에서 태그를 답니다. 배포 후 급한 버그는 hotfix 브랜치를 태그에서 갈라 고치고 패치 버전만 올려 새 태그를 답니다.

서명 태그(git tag -s)는 GPG 서명이 붙는 주석 태그로, 배포본의 무결성을 검증할 때 씁니다.

핵심 원리
  • 2.1 태그는 커밋을 가리키는 고정 이름표
  • 2.2 경량 태그와 주석 태그
  • 2.3 태그 조회
  • 2.4 태그 삭제·이동·특정 커밋에 달기
  • 2.5 태그는 push 에 자동 포함되지 않음
  • 2.6 유의적 버전(semver)
  • 2.7 사전 릴리스와 빌드 메타데이터
  • 2.8 자바 프로젝트의 버전 흐름
  • 2.9 describe 로 빌드 번호 읽기
  • 2.10 태그로 배포본 확인하기
  • 2.11 archive 로 소스 반출
  • 2.12 릴리스 노트·릴리스 브랜치·hotfix
이전 섹션1 왜 배우는가2 / 7다음 섹션3 코드 예제