[tag]
특정 커밋에 별칭 및 추가 정보를 붙인다.
버전 관리에 사용되기도 한다.
태그 이름은 고유하도록 정해야 한다. 같은 이름을 갖는 태그가 있을 수 없다.
한 커밋에 여러 태그를 붙일 수는 있다.
> git tag
v1.0.0
v1.1.0
v1.2.0
v2.0.0
단순하게 현재 사용되고 있는 모든 tag를 조회 가능
> git tag -l(--list) "v.1.*"
v1.0.0
v1.1.0
v1.2.0
-l(--list)옵션으로 패턴과 일치하는 tag만 조회 가능
> git show-ref --tags --dereference
925cde9bf383c643326ac463f33487e047274125 refs/tags/v1.0.0
73248f5979839a1554cd28a260c6e6306bec44c7 refs/tags/v1.1.0
b5ea8ad693bc6e59d9e723673ceda77ff6babfc7 refs/tags/v1.2.0
549ee285b393bdbf7b99da7ae6e7dd9422641684 refs/tags/v2.0.0<---- annotated 태그 본체
5924649e1d3153b6d93aa82f8214106e8dc7ce05 refs/tags/v2.0.0^{}<---- annotated 태그가 붙여진 커밋
git show-ref에 --tags옵션으로
사용 중인 태그와 붙여진 커밋들을 조회 가능
--dereference옵션도 붙여야 annotated 태그가 붙인 커밋도 조회할 수 있다.
(붙이지 않으면, annotated 태그는 태그 본체만 조회된다)
> git log
commit 925cde9bf383c643326ac463f33487e047274125 (HEAD -> a01, origin/a01, tag: v1.0.0)<---- tag: 가 붙어있음
Author: USER <email@address.com>
Date: EEE MMM dd HH:mm:ss yyyy +0900
add 002.txt
git log에서 tag가 붙은 것을 확인할 수 있으며,
tag가 붙은 커밋은 커밋ID 대신 tag를 사용할 수 있다.
(git revert v1.0.0처럼)
> git ls-remote --tags
From https://github.com/BlackdeerY/example.git
925cde9bf383c643326ac463f33487e047274125 refs/tags/v1.0.0
b5ea8ad693bc6e59d9e723673ceda77ff6babfc7 refs/tags/releaseFirst
925cde9bf383c643326ac463f33487e047274125 refs/tags/releaseFirst^{}
리모트의 태그들도 조회할 수 있다.
tag에는 별칭만 붙이는 lightweight 태그와,
추가로 태그작성자, 태그메시지, GPG 서명 등도 기입할 수 있는 annotated 태그가 있다.
> git tag 태그명 [붙여질_커밋]
> git tag v1.0.0
아무 옵션도 없이 붙이면 lightweight 태그를 붙인다.
붙여질_커밋을 생략하면 현재 가리키는 커밋에 붙인다.
> git tag -a(--annotate) 태그명 [붙여질_커밋]
> git tag -a relaseFirst
-a(--annotate)옵션으로 annotated 태그를 붙일 수 있다.
커밋할 때처럼 태그 메시지를 정할 수 있고, 태그를 생성한 시각과 작성자가 기록된다.
> git show-ref --tags --dereference
925cde9bf383c643326ac463f33487e047274125 refs/tags/v1.0.0
b5ea8ad693bc6e59d9e723673ceda77ff6babfc7 refs/tags/releaseFirst<---- annotated 태그 본체
925cde9bf383c643326ac463f33487e047274125 refs/tags/releaseFirst^{}<---- annotated 태그가 붙여진 커밋
annotated 태그는 태그 스스로의 개체를 따로 갖는다.
annotated 태그를 lightweight 태그처럼 쓰려면, 태그명^{}처럼 뒤에 기호로 명시하여 커밋으로 사용한다.
> git show v.1.0.0<---- lightweight 태그
commit 925cde9bf383c643326ac463f33487e047274125 (HEAD -> a01, origin/a01, tag: firstRelease, tag: v1.0.0)
Author: USER <email@address.com><---- 커밋 작성자
Date: EEE MMM dd HH:mm:ss yyyy +0900<---- 커밋 작성시각
add 002.txt<---- 커밋 메시지
diff --git a/002.txt b/002.txt
new file mode 100644
index 0000000..5902f77
--- /dev/null
+++ b/002.txt
@@ -0,0 +1 @@
+002
lightweight 태그는 일반 커밋과 다를바 없지만,
> git show releaseFirst<---- annotated 태그
tag releaseFirst
Tagger: USER <email@address.com><---- 태그 작성자
Date: EEE MMM dd HH:mm:ss yyyy +0900<---- 태그 작성시각
my first release<---- 태그 메시지
commit 925cde9bf383c643326ac463f33487e047274125 (HEAD -> a01, origin/a01, tag: firstRelease, tag: v1.0.0)
Author: USER <email@address.com><---- 커밋 작성자
Date: EEE MMM dd HH:mm:ss yyyy +0900<---- 커밋 작성시각
add 002.txt<---- 커밋 메시지
diff --git a/002.txt b/002.txt
new file mode 100644
index 0000000..5902f77
--- /dev/null
+++ b/002.txt
@@ -0,0 +1 @@
+002
annotated 태그는 본체로 조회를 하면 태그의 정보를 덧붙여 보여준다.
> git tag -d 태그명
모든 태그는 -d옵션으로 삭제할 수 있다.
한 커밋에 여러 개의 태그를 붙일 수 있으므로,
태그를 수정하고 싶다면 새 태그를 붙이고 기존 태그를 삭제하면 된다.
> git tag v.1.1.0 v.1.0.0<---- lightweight 태그 자체가 그 태그가 가리키는 커밋
> git tag -d v.1.0.0<---- 기존 태그 삭제
> git tag myRelease releaseFirst^{}<---- annotated 태그가 가리키는 커밋을 명시
> git tag -d releaseFirst<---- 기존 태그 삭제
annotated 태그는 태그 자체에 새 태그를 붙이는 것이 아니라,
기존 태그가 가리키던 커밋을 명시하여 새 태그를 붙이고, 기존 태그를 제거.
> git ls-remote --tags
> git ls-remote --tags
From https://github.com/BlackdeerY/example.git
925cde9bf383c643326ac463f33487e047274125 refs/tags/v1.0.0
b5ea8ad693bc6e59d9e723673ceda77ff6babfc7 refs/tags/releaseFirst
925cde9bf383c643326ac463f33487e047274125 refs/tags/releaseFirst^{}
리모트의 태그들을 조회할 수 있다.
커밋에 태그를 붙여도 git push때 기본적으로 함께 push되진 않는다.
git push --follow-tags로, --follow-tags옵션을 주면 태그도 함께 push할 수 있다.
> git push 저장소명 태그명
> git push origin v1.0.0
Total 0 (delta 0), reused 0 (delta 0), pack-reused 0
To https://github.com/BlackdeerY/example.git
* [new tag] v1.0.0 -> v1.0.0
태그만 자체적으로 따로 push하려면, 태그명을 직접 push한다.
> git push 저장소명 --tags
> git push origin --tags
Enumerating objects: 1, done.
Counting objects: 100% (1/1), done.
Writing objects: 100% (1/1), 176 bytes | 88.00 KiB/s, done.
Total 1 (delta 0), reused 0 (delta 0), pack-reused 0
To https://github.com/BlackdeerY/example.git
* [new tag] v1.1.0 -> v1.1.0
* [new tag] v1.2.0 -> v1.2.0
태그만 전체적으로 push하려면 위의 명령어를 사용한다.
> git push 저장소명 :refs/tags/태그명
> git push 저장소명 :태그명
> git push 저장소명 -d 태그명
> git push origin -d v1.0.1
To https://github.com/BlackdeerY/example.git
- [deleted] v1.0.1
리모트의 태그는 위처럼 삭제할 수 있다.
(세 형태 모두 사용 가능)