Commit “kunci versi” sudah berdiri, tetapi hash seperti 37b21f8 bukan nama yang bisa diumumkan ke manusia. Rilis butuh penunjuk yang punya nama, punya penanda tangan, dan tidak ikut bergeser saat riwayat bertambah. Penunjuk itu adalah annotated tag — dan bagian ini membuatnya, membedahnya sampai ke tipe objeknya, lalu membagikannya ke remote pusat.

Menandai Titik Rilis #

Tag rilis dibuat dengan git tag -a dan pesan yang disusun dua bagian: baris judul, lalu isi ringkasan rilis. Dua flag -m menghasilkan dua paragraf terpisah:

bash
git tag -a v1.0.0 -m "Katalog Film 1.0.0" -m "Fitur: daftar film, pencarian. Perbaikan: judul."

Perintah ini senyap — tidak ada keluaran sama sekali. Kehadirannya baru terasa saat ditanya:

bash
git tag -l

Output yang Dihasilkan:

text
v1.0.0

Nama tag v1.0.0 memakai awalan v — gaya yang dipilih konsisten sejak awal karena tag ini meniru rilis publik, salah satu dua kebiasaan yang dibandingkan di Semantic Versioning . Pesan multi-barisnya bukan hiasan: pada Bagian 4 pesan itu menjadi bibit catatan rilis.

Membedah Tag yang Baru Lahir #

git show pada sebuah tag memperlihatkan seluruh kartu identitasnya:

bash
git show v1.0.0 --stat

Output yang Dihasilkan:

text
tag v1.0.0
Tagger: Budi Santoso <[email protected]>
Date:   Tue Oct 13 10:05:00 2026 +0700

Katalog Film 1.0.0

Fitur: daftar film, pencarian. Perbaikan: judul.

commit 37b21f8b3da2c0381b9c16eb876b1892a61c776b
Author: Budi Santoso <[email protected]>
Date:   Tue Oct 13 10:00:00 2026 +0700

    chore: kunci versi 1.0.0

 README.md | 4 ++++
 VERSION   | 2 +-
 2 files changed, 5 insertions(+), 1 deletion(-)

Keluaran itu punya dua lapis. Lapis atas adalah metadata objek tag: nama v1.0.0, penanda tangan Tagger: Budi Santoso, tanggal pembuatan tag, lalu pesan rilis dua paragraf persis seperti yang kita tulis. Lapis bawah adalah commit yang ditunjuk — chore: kunci versi 1.0.0 — lengkap dengan diffstat yang memperlihatkan isi commitnya: README.md bertambah empat baris dan VERSION bergeser dari 0.1.0 ke 1.0.0. Tag dan commit adalah dua objek berbeda, dan git show menyambung keduanya.

Tag Menunjuk Commit, Bukan HEAD #

Satu pertanyaan perlu dibuktikan, bukan diasumsikan: tipe apa sebenarnya v1.0.0, dan commit mana yang ditunjuknya?

bash
git cat-file -t v1.0.0

Output yang Dihasilkan:

text
tag

Jawaban tag menegaskan yang berdiri di sana adalah objek tag utuh, bukan penunjuk polos. Notasi v1.0.0^{commit} lalu “mengupas” tag itu sampai ke commitnya — pola derefensi yang sama dengan Annotated Tag :

bash
git rev-parse v1.0.0^{commit}
git rev-parse HEAD

Output yang Dihasilkan (perintah git rev-parse v1.0.0^{commit}):

text
37b21f8b3da2c0381b9c16eb876b1892a61c776b

Output yang Dihasilkan (perintah git rev-parse HEAD):

text
37b21f8b3da2c0381b9c16eb876b1892a61c776b

Dua hash itu identik — tag terpasang tepat pada commit “kunci versi”. Ini penting karena HEAD akan terus bergeser seiring commit baru, sementara tag tidak: v1.0.0 akan tetap menunjuk commit ini selamanya, apa pun yang terjadi pada cabang. Tag adalah penunjuk permanen ke satu titik beku; commit yang ditunjuknya dijamin tak berubah. Seluruh sintaks penamaan ref di baliknya terdokumentasi di dokumentasi git tag .

Membagikan Tag ke Pusat #

Tag yang hanya hidup di laptop kita belum berarti apa-apa bagi dunia — dan git push biasa tidak mengantarnya. Siapkan dulu remote pusat berupa repo bare lokal, lalu dorong keduanya:

bash
git init --bare ../katalog-film-pusat.git
git remote add origin ../katalog-film-pusat.git
git push -u origin main
git push origin v1.0.0

Output yang Dihasilkan (perintah git init --bare ../katalog-film-pusat.git):

text
Initialized empty Git repository in /home/z/my-project/tutorial-extracted/work/sandbox/proyek-git/proyek-07/katalog-film-pusat.git/

Output yang Dihasilkan (perintah git push -u origin main):

text
To ../katalog-film-pusat.git
 * [new branch]      main -> main
branch 'main' set up to track 'origin/main'.

Output yang Dihasilkan (perintah git push origin v1.0.0):

text
To ../katalog-film-pusat.git
 * [new tag]         v1.0.0 -> v1.0.0

Perhatikan urutannya: push main membawa cabang dan seluruh objeknya, tetapi tag tidak ikut terangkut — tag harus didorong dengan namanya secara eksplisit, persis perilaku yang dibuktikan di Berbagi Tag ke Remote . Baris * [new tag] adalah tanda v1.0.0 kini berdiri di pusat.

Rilis v1.0.0 kini punya nama, penunjuk, dan tempat berbagi. Tapi satu dokumen penting masih kosong: pembaca yang datang dari pusat tidak punya cara membaca apa yang berubah di 1.0.0 tanpa membuka riwayat commit mentah. Dokumen itu — changelog — pekerjaan kita di Bagian 3: Menyiapkan Changelog .