Di artikel ini kita bahas dua fitur Git yang sangat berguna untuk skenario-skenario spesifik: cherry-pick untuk mengambil commit tertentu dari branch lain, dan tag untuk menandai titik penting di histori seperti rilis versi.
Git Cherry-Pick
Apa itu Cherry-Pick?
git cherry-pick memungkinkan kamu mengambil satu atau beberapa commit spesifik dari branch lain dan menerapkannya ke branch saat ini, tanpa harus merge seluruh branch.
main: A ── B ── C ── D ── E
\
feature: F ── G ── H
git cherry-pick G (dari main)
main: A ── B ── C ── D ── E ── G'
\
feature: F ── G ── H
G' adalah commit baru dengan konten yang sama dengan G, tapi hash berbeda.
Kapan Menggunakan Cherry-Pick?
- Hotfix dari branch lain: Perbaikan bug sudah ada di
develop, tapi perlu segera diaplikasikan kemaintanpa merge seluruhdevelop - Mengambil fitur parsial: Hanya butuh satu dari banyak commit di sebuah branch
- Memindahkan commit yang salah branch: Commit yang dibuat di branch yang salah
Cara Menggunakan
# Cherry-pick satu commit (hash bisa didapat dari git log)
git cherry-pick a1b2c3d
# Cherry-pick beberapa commit sekaligus
git cherry-pick a1b2c3d b2c3d4e c3d4e5f
# Cherry-pick range commit (inklusif keduanya)
git cherry-pick a1b2c3d..c3d4e5f
# Cherry-pick tanpa langsung commit (stage dulu)
git cherry-pick -n a1b2c3d
# Cherry-pick dengan pesan commit kustom
git cherry-pick a1b2c3d -e # buka editor untuk edit pesan
Menangani Cherry-Pick Conflict
git cherry-pick a1b2c3d
# CONFLICT (content): Merge conflict in src/auth.js
# Selesaikan konflik
nano src/auth.js
git add src/auth.js
# Lanjutkan cherry-pick
git cherry-pick --continue
# Atau batalkan
git cherry-pick --abort
Contoh Workflow: Hotfix ke Production
# Bug kritis ditemukan di production (main)
# Perbaikan sudah ada di develop dengan hash d4e5f6a
git switch main
git cherry-pick d4e5f6a
git push origin main
# Opsional: juga apply ke develop agar sinkron
# (biasanya tidak perlu jika develop akan merge ke main)
Git Tag
Apa itu Tag?
Tag adalah referensi yang menunjuk ke commit spesifik — berbeda dari branch yang selalu bergerak maju, tag bersifat statis dan tidak berubah. Tag biasanya digunakan untuk menandai titik rilis (v1.0.0, v2.1.3).
Dua Jenis Tag
Lightweight Tag — hanya pointer sederhana ke commit, tanpa metadata tambahan:
git tag v1.0.0
git tag v1.0.0 a1b2c3d # tag commit spesifik
Annotated Tag — mengandung metadata lengkap: nama tagger, email, tanggal, dan pesan. Ini yang direkomendasikan untuk rilis:
git tag -a v1.0.0 -m "Rilis versi 1.0.0 - fitur login dan registrasi"
git tag -a v1.0.0 a1b2c3d -m "Tag commit lama sebagai v1.0.0"
Melihat Tag
# Lihat semua tag
git tag
# Lihat tag dengan pola tertentu
git tag -l "v1.*"
git tag -l "v2.0*"
# Lihat detail tag annotated
git show v1.0.0
Push Tag ke Remote
Secara default, git push tidak mengirim tag ke remote. Harus eksplisit:
# Push satu tag
git push origin v1.0.0
# Push semua tag sekaligus
git push origin --tags
# Push hanya annotated tags (bukan lightweight)
git push origin --follow-tags
Checkout ke Tag
# Lihat kode di versi tertentu (detached HEAD state)
git checkout v1.0.0
# Buat branch baru dari tag (lebih disarankan)
git switch -c hotfix/v1.0.1 v1.0.0
Menghapus Tag
# Hapus tag lokal
git tag -d v1.0.0
# Hapus tag di remote
git push origin --delete v1.0.0
git push origin :refs/tags/v1.0.0 # cara lama
Semantic Versioning dengan Git Tag
Standar industri untuk penamaan versi adalah Semantic Versioning (SemVer): MAJOR.MINOR.PATCH
- MAJOR (v2.0.0) — breaking changes, tidak backward compatible
- MINOR (v1.2.0) — fitur baru, backward compatible
- PATCH (v1.2.1) — bug fix, backward compatible
# Rilis patch (bug fix)
git tag -a v1.0.1 -m "Perbaikan bug login pada perangkat mobile"
# Rilis minor (fitur baru)
git tag -a v1.1.0 -m "Tambah fitur dark mode dan notifikasi"
# Rilis major (breaking changes)
git tag -a v2.0.0 -m "Perombakan total API - tidak kompatibel dengan v1.x"
# Pre-release
git tag -a v2.0.0-beta.1 -m "Beta pertama untuk v2.0.0"
git tag -a v2.0.0-rc.1 -m "Release candidate untuk v2.0.0"
Membuat GitHub Release dari Tag
Setelah push tag ke GitHub, kamu bisa membuat GitHub Release yang menampilkan changelog dan file distribusi:
- Di GitHub, klik Releases → Draft a new release
- Pilih tag yang sudah di-push
- Tulis judul dan deskripsi release (changelog)
- Lampirkan binary/build artifacts jika ada
- Klik Publish release
Atau otomatis via GitHub Actions:
on:
push:
tags: ['v*']
jobs:
release:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Create GitHub Release
uses: softprops/action-gh-release@v1
with:
generate_release_notes: true # otomatis generate dari commit messages
Kesimpulan
Cherry-pick dan tag adalah dua alat yang melengkapi toolset Git kamu untuk skenario yang lebih spesifik. Cherry-pick memberikan fleksibilitas untuk memindahkan perubahan secara bedah-bedahan tanpa harus merge seluruh branch, sementara tag memberikan cara yang terstruktur untuk menandai dan mendistribusikan rilis.
Di artikel berikutnya, kita mulai membahas GitHub — cara menghubungkan repository lokal ke remote dan bekerja dengan git push, git pull, dan git fetch.
Kiki/🎮🍉⌨️🍩💻