Tag adalah nama yang ditempelkan pada satu commit untuk menandai titik yang penting, dan tag rilis (release tag) adalah pemakaiannya yang paling umum. Berbeda dengan branch, penunjuk tag tidak bergerak ketika commit baru dibuat, sehingga tag menjadi patokan yang dapat dirujuk selamanya. Topik ini membahas tag ringan (lightweight tag), bentuk tag yang paling sederhana, beserta cara membuat dan membacanya.
Tag sebagai penunjuk yang tidak bergerak#
Penunjuk tag tersimpan sama seperti branch, yaitu berkas kecil di dalam .git/refs/tags/ yang isinya hash sebuah commit. Perbedaan perilakunya terletak pada kapan penunjuk itu diperbarui: branch bergerak setiap commit baru dibuat di atasnya, sedangkan tag dibiarkan menunjuk commit asalnya sampai dihapus atau dipindahkan dengan sengaja. Sifat diam inilah yang membuat tag layak menyandang nama versi, karena nomor versi pada perangkat lunak tidak boleh berpindah sendiri.
Buat repository latihan dengan dua commit, lalu tandai commit terakhirnya.
# tanggal commit ditetapkan agar keluaran contoh dapat direproduksi secara persis
export GIT_AUTHOR_DATE="2026-11-01T09:00:00+07:00"
export GIT_COMMITTER_DATE="2026-11-01T09:00:00+07:00"rm -rf /tmp/lab-tag
mkdir /tmp/lab-tag
cd /tmp/lab-tag
git init -b main
git config user.name "Budi"
git config user.email "[email protected]"
printf "Aplikasi versi pengembangan.\n" > app.txt
git add app.txt
git commit -m "Versi awal"
printf "Aplikasi versi pengembangan.\nMenu siap.\n" > app.txt
git commit -am "Fitur menu"
git tag v0.9.0
git tag
cat .git/refs/tags/v0.9.0Initialized empty Git repository in /tmp/lab-tag/.git/
[main (root-commit) 7e85a27] Versi awal
1 file changed, 1 insertion(+)
create mode 100644 app.txt
[main 2a6c5aa] Fitur menu
1 file changed, 1 insertion(+)
v0.9.0
2a6c5aa992ade8d98c75ad6235dd8ae70bb6e173Perintah git tag tanpa argumen menampilkan daftar tag dalam urutan alfabet, dan isi berkas penunjuknya adalah hash penuh commit yang ditandai. Tag ringan tidak menyimpan apa pun selain hash itu, dan itulah sebabnya bentuk ini disebut ringan.
Menandai commit lama#
Tag tidak wajib menunjuk commit terbaru. Menyebut nama commit sebagai argumen kedua menandai titik mana pun pada riwayat, dan nama relatif seperti HEAD~1 diterima dengan cara yang sama.
git tag v0.5.0 HEAD~1
git tag
git show v0.5.0 --no-patchv0.5.0
v0.9.0
commit 7e85a278dbb8b330ff420e1e21b20dcc31f0eaba
Author: Budi <[email protected]>
Date: Sun Nov 1 09:00:00 2026 +0700
Versi awalKeluaran git show pada tag ringan langsung menampilkan commit yang ditunjuknya, karena tag ringan tidak menyimpan metadata tersendiri. Tag lama yang tidak terpakai dihapus dengan git tag -d nama, dan penunjuknya diganti dengan perintah yang sama pada titik baru apabila kesalahan penandaan terjadi.
Tag terlihat pada log#
Setelah penandaan, tag muncul sebagai tanda pada keluaran log melalui opsi --decorate yang sudah aktif pada banyak penyetelan bawaan.
printf "Aplikasi versi pengembangan.\nMenu siap.\nPengaturan.\n" > app.txt
git commit -am "Fitur pengaturan"
git log --oneline --decorate -2[main 39a8c85] Fitur pengaturan
1 file changed, 1 insertion(+)
39a8c85 (HEAD -> main) Fitur pengaturan
2a6c5aa (tag: v0.9.0) Fitur menuBaris kedua memuat (tag: v0.9.0) di samping hash, sementara commit terbaru hanya membawa penanda branch dan HEAD. Perbandingan ini memperlihatkan sifat kedua penunjuk secara berdampingan: main sudah bergerak ke commit baru, sedangkan tag tetap diam pada tempatnya.
| Aspek | Branch | Tag |
|---|---|---|
| Perilaku penunjuk | bergerak pada setiap commit | tetap pada commit yang ditandai |
| Isi penunjuk ringan | hash commit | hash commit |
| Pemakaiannya | jalur pekerjaan | patokan bernama seperti versi |
Menelusuri dari tag#
Karena tag adalah nama yang menunjuk commit, seluruh perintah yang menerima nama commit menerima nama tag, dan kebiasaan itu yang membuat penanda rilis begitu berguna. Riwayat sampai sebuah rilis ditampilkan dengan tag pada posisi ujungnya, sedangkan perbandingan dua rilis diperoleh dengan memasangkan kedua tag pada git diff.
git log --oneline v0.9.0
git diff v0.5.0 v0.9.0 --stat2a6c5aa Fitur menu
7e85a27 Versi awal
app.txt | 1 +
1 file changed, 1 insertion(+)Perintah pertama menampilkan riwayat sampai commit yang ditandai v0.9.0, dan perintah kedua merangkum seluruh perubahan antara dua titik rilis dalam bentuk ringkas. Dua pertanyaan yang paling sering muncul pada pekerjaan rilis, yaitu isi suatu versi dan batas antar versi, terjawab oleh dua bentuk perintah yang sama ini tanpa perlu mengingat hash apa pun. Bentuk yang sama juga berlaku pada git show tag yang memeriksa commit yang ditandai.
Nama tag yang layak#
Nama tag terlihat di banyak tempat, dari daftar git tag, keluaran log, sampai halaman rilis pada layanan hosting, sehingga pola penamaannya perlu disepakati sejak awal. Pola yang paling luas memakai semantik versi tiga bagian, yaitu mayor, minor, dan perbaikan yang dipisahkan titik, seperti v2.1.3, dengan konvensi kenaikan angka yang menjelaskan besar perubahannya. Karakter yang sah pada nama tag mencakup huruf, angka, titik, dan garis hubung, sedangkan spasi tidak diizinkan.
Konsistensi awalan juga berperan pada penyaringan, karena git tag -l "v2.*" hanya bekerja apabila seluruh tag memang mengikuti pola yang sama. Satu keputusan kecil yang sebaiknya ditetapkan lebih awal adalah keberadaan huruf v pada awalan, karena proyek yang setengah pakai v2.0.0 dan setengah lagi 2.0.1 akan membuat daftar tagnya sulit dibaca dan sulit difilter.
Ringkasan#
- Tag adalah penunjuk tetap pada satu commit, dan tag ringan berisi hanya hash commit tersebut.
- Tag dapat menandai commit mana pun dengan menyebut namanya atau nama relatifnya sebagai argumen kedua.
- Tag tampil pada
git log --decoratesebagai penandatag:, dan tidak ikut bergerak saat commit baru dibuat. - Branch dan tag memakai mekanisme penunjuk yang sama dengan perilaku yang berlawanan.
Referensi#
- Git Basics - Tagging — Pro Git — bab Pro Git tentang tag ringan dan tag beranotasi.
- git-tag — Git Documentation — rujukan perintah tag beserta opsi daftar dan penghapusannya.