Tag adalah nama permanen yang ditempel di satu commit, biasanya untuk menandai versi rilis seperti v1.0. Bayangin sebuah buku. Penulisnya terus merevisi naskah, tapi buku "cetakan pertama" yang sudah dibeli orang isinya tetap. Branch itu seperti naskah yang terus berubah, sedangkan tag itu cap "cetakan pertama": dia menunjuk satu versi naskah, selamanya.
🧪 Tebakan cepat: kamu bikin tag
v1.0di commit "release pertama", lalu commit dua kali lagi dimain. Sekarangv1.0menunjuk ke commit yang mana? Tebak dulu, jawabannya ada di bagian "Tag diam, branch jalan".
Bikin tag dan lihat daftarnya
git tag v1.0 # tempel tag v1.0 di commit tempat kamu berada
git tag # tampilkan semua tag
Di repo yang app.js-nya berisi console.log("v1"), hasilnya begini (hash-mu pasti beda):
$ git commit -m "release pertama"
[main (root-commit) 4c1d2e3] release pertama
1 file changed, 1 insertion(+)
$ git tag v1.0
$ git tag
v1.0
git tag v1.0gak mencetak apa-apa kalau berhasil. Tag-nya menempel di commit tempat HEAD berada sekarang.git tagtanpa nama menampilkan semua tag, urut abjad.git tag -ldangit tag --listsama saja.- Tag butuh commit. Di repo yang belum punya commit, gak ada yang bisa ditempeli.
Tag diam, branch jalan
Lanjutkan repo tadi dengan dua commit lagi. C1, C2, C3 adalah commit-commitnya:
| Langkah | Perintah | main di |
v1.0 di |
|---|---|---|---|
| 1 | git commit -m "release pertama" |
C1 | belum ada |
| 2 | git tag v1.0 |
C1 | C1 |
| 3 | git commit -m "tambah fitur 2" |
C2 | C1 |
| 4 | git commit -m "tambah fitur 3" |
C3 | C1 |
Branch bergeser tiap kali kamu commit, tag gak pernah. v1.0 tetap di C1, kecuali kamu sendiri yang menghapus dan membuatnya ulang. Itu jawaban tebakannya. git log --oneline menunjukkan dua-duanya:
$ git log --oneline
9e8f7a6 (HEAD -> main) tambah fitur 3
5b4c3d2 tambah fitur 2
4c1d2e3 (tag: v1.0) release pertama
Karena gak bergerak, tag cocok untuk menandai "kode persis yang dirilis sebagai v1.0". Kalau minggu depan ada laporan bug di v1.0, kamu tahu commit mana yang harus diperiksa.
Lightweight dan annotated
Ada dua jenis tag:
- Lightweight:
git tag v1.0. Cuma nama yang menunjuk ke commit, gak menyimpan apa-apa lagi. - Annotated:
git tag -a v1.1 -m "Rilis 1.1: fitur 2 dan 3".-amembuat tag yang menyimpan metadata: nama dan email pembuatnya (tagger), tanggal, dan pesan. Tanpa-m, Git membuka editor untuk menulis pesannya.
git show menampilkan bedanya. Tag annotated memperlihatkan data tag-nya dulu, baru commit-nya:
$ git show v1.1
tag v1.1
Tagger: Sari <[email protected]>
Date: Thu Oct 8 10:15:00 2026 +0700
Rilis 1.1: fitur 2 dan 3
commit 9e8f7a6b1c2d3e4f5a6b7c8d9e0f1a2b3c4d5e6f (HEAD -> main, tag: v1.1)
Author: Sari <[email protected]>
Date: Thu Oct 8 10:12:00 2026 +0700
tambah fitur 3
Sesudahnya Git juga mencetak perubahan di commit itu. git show v1.0, yang lightweight, langsung mulai dari baris commit ..., karena gak ada data tag yang bisa ditampilkan. Untuk rilis, pakai annotated: tercatat siapa yang merilis, kapan, dan catatannya.
Mengirim tag ke GitHub
Tag dibuat di komputermu saja, dan git push biasa gak ikut mengirimnya. Kirim tag secara terpisah:
git push origin v1.0 # kirim satu tag
git push origin --tags # kirim semua tag
origin adalah nama repo online-mu, biasanya di GitHub. Cara menyambung ke sana dan push dibahas lengkap di pelajaran Git Push & Pull. Di sini cukup ingat: tag dikirim terpisah.
💡 Nama tag: semantic versioning
Kebanyakan proyek menamai tag dengan pola vMAJOR.MINOR.PATCH, misalnya v1.4.2. Perbaikan bug kecil menaikkan PATCH (v1.4.3), fitur baru yang gak merusak apa pun menaikkan MINOR (v1.5.0), dan perubahan yang bikin kode lama gak jalan lagi menaikkan MAJOR (v2.0.0). v1.0 di latihan ini adalah bentuk pendeknya.
⚠️ Jebakan yang sering ketemu
- Tag sebelum commit pertama. Gak ada commit yang bisa ditempeli, jadi Git menolak. Latihan ini juga mengecek
mainpunya minimal 1 commit. - Nama yang sama dua kali.
git tag v1.0yang kedua ditolak denganfatal: tag 'v1.0' already exists. Pakai nama baru, misalnyav1.1, atau hapus dulu dengangit tag -d v1.0kalau memang salah tempel. - Mengira tag ikut ter-push.
git pushbiasa cuma mengirim branch. Tag butuhgit push origin v1.0ataugit push origin --tags. - Typo di nama.
V1.0,v1.0.danv 1.0beda denganv1.0. Latihan ini mengecek nama persisv1.0.
TL;DR: Tag adalah nama permanen di satu commit, untuk menandai rilis. git tag v1.0 membuat tag lightweight (cuma penunjuk), git tag -a v1.0 -m "pesan" membuat tag annotated yang menyimpan metadata (tagger, tanggal, pesan), git tag menampilkan daftarnya, dan git show v1.0 menampilkan isinya. Branch bergeser tiap commit, tag diam di tempat. Tag gak ikut git push biasa: kirim dengan git push origin v1.0 atau git push origin --tags.