Git Stash & Git Tag
Tujuan Pembelajaran
- Menguasai penggunaan git stash untuk menyimpan perubahan sementara
- Memahami Git Tag dan Semantic Versioning
- Mampu membuat tag ringan dan beranotasi
Materi Inti
A. Git Stash --- Simpan Perubahan Sementara
Git stash memungkinkan kamu menyimpan perubahan yang belum siap di-commit ke tempat penyimpanan sementara. Ini sangat berguna ketika kamu harus berpindah branch di tengah pekerjaan.
Perintah dasar git stash:
# Simpan perubahan ke stash
git stash
# atau dengan pesan deskriptif
git stash push -m "Kerja setengah jadi di halaman login"
# Lihat daftar stash
git stash list
# stash@{0}: On fitur: Kerja setengah jadi di halaman login
# stash@{1}: WIP on main: abc123 commit sebelumnya
# Ambil stash teratas dan hapus dari daftar
git stash pop
# Ambil stash tertentu TANPA menghapus
git stash apply stash@{1}
# Hapus stash tertentu
git stash drop stash@{0}
# Buat branch baru dari stash
git stash branch branch-baru stash@{0}
Kapan menggunakan stash:
- Harus pindah branch tapi ada perubahan yang belum selesai
- Ingin βmenyimpanβ perubahan sementara tanpa commit
- Ada bug urgent di branch lain yang harus segera diperbaiki
Tips: Selalu beri pesan deskriptif pada stash dengan
git stash push -m "pesan"agar mudah dikenali nanti.
B. Git Tag & Semantic Versioning
Tag digunakan untuk menandai titik penting dalam history repository, biasanya untuk menandai versi release.
Dua jenis tag:
# Tag ringan (lightweight) - hanya pointer ke commit
git tag v1.0.0
# Tag beranotasi (recommended) - menyimpan info lengkap
git tag -a v1.0.0 -m "Release versi 1.0.0 - fitur login dan register"
# Tag pada commit tertentu
git tag -a v0.9.0 abc123 -m "Beta release"
# Lihat semua tag
git tag
# Lihat detail tag beranotasi
git show v1.0.0
# Push tag ke remote
git push origin v1.0.0 # satu tag
git push origin --tags # semua tag
# Hapus tag
git tag -d v0.9.0 # lokal
git push origin --delete v0.9.0 # remote
Semantic Versioning: MAJOR.MINOR.PATCH
| Bagian | Contoh | Kapan Berubah |
|---|---|---|
| MAJOR | 1.0.0 | Perubahan besar yang tidak kompatibel (breaking changes) |
| MINOR | 1.1.0 | Fitur baru yang tetap kompatibel (backward compatible) |
| PATCH | 1.1.1 | Perbaikan bug kecil |
Contoh:
1.0.0->2.0.0: API berubah total, kode lama mungkin tidak berjalan1.0.0->1.1.0: Ditambah fitur baru, kode lama tetap berjalan1.0.0->1.0.1: Bug diperbaiki, tidak ada fitur baru
Demonstrasi Live
Stash Workflow dalam Skenario Nyata
cd proyek-tim
# Sedang mengerjakan fitur dashboard
git switch -c fitur/dashboard
echo "<div>Dashboard</div>" > dashboard.html
echo "<style>body { margin: 0; }</style>" > dashboard.css
# Tiba-tiba ada bug urgent di main!
# Simpan pekerjaan yang belum selesai
git stash push -m "Dashboard setengah jadi"
# Pindah ke main untuk fix bug
git switch main
echo "<!-- fixed -->" >> index.html
git add . && git commit -m "fix: perbaiki bug di halaman utama"
# Kembali ke fitur dan ambil stash
git switch fitur/dashboard
git stash pop
# File dashboard.html dan dashboard.css kembali!
# Lanjutkan dan selesaikan fitur
git add . && git commit -m "feat: tambah halaman dashboard"
# Merge dan buat tag release
git switch main
git merge fitur/dashboard
git tag -a v1.0.0 -m "Release v1.0.0: Dashboard feature"
# Tambah fitur kecil lain
echo "<footer>Copyright 2024</footer>" >> index.html
git add . && git commit -m "feat: tambah footer"
git tag -a v1.1.0 -m "Release v1.1.0: Footer"
# Lihat semua tag
git tag
# Push tag ke remote
git push origin --tags
Latihan Interaktif
Latihan LGB: Git Tags
Level: βGit Tagsβ (Mixed Bag - Level 4)
Buka Learn Git Branching dan ketik:
level mixed4
Tujuan: Buat tag v0 di commit C1 dan v1 di commit C2.
Solusi:
git tag v0 C1
git tag v1 C2
git checkout C2
Info: Di LGB, tag divisualisasikan sebagai label yang menempel pada commit tertentu. Perhatikan bahwa tag tidak berpindah saat ada commit baru, berbeda dengan branch.
Latihan Terminal: Stash & Tag Lengkap
# Buat project baru
mkdir latihan-stash-tag && cd latihan-stash-tag && git init
# Setup awal
echo "# Website Toko" > README.md
echo "<h1>Toko Online</h1>" > index.html
git add . && git commit -m "init: setup project toko online"
git tag -a v0.1.0 -m "Initial setup"
# Mulai fitur katalog
git switch -c feature/katalog
echo "<div>Katalog Produk</div>" > katalog.html
echo "<style>.katalog { display: grid; }</style>" > katalog.css
# Tiba-tiba harus pindah!
git stash push -m "Katalog belum selesai - layout grid"
# Fix bug di main
git switch main
echo "<h1>Toko Online - Terbaik!</h1>" > index.html
git add . && git commit -m "fix: perbaiki judul halaman utama"
# Kembali ke katalog
git switch feature/katalog
git stash list
git stash pop
# Selesaikan katalog
echo "<div class='katalog'>Item 1</div>" >> katalog.html
git add . && git commit -m "feat(katalog): tambah halaman katalog produk"
# Merge dan tag
git switch main
git merge feature/katalog
git branch -d feature/katalog
git tag -a v1.0.0 -m "Release v1.0.0: Katalog produk"
# Verifikasi
git log --oneline --decorate
git tag -n
Tugas Mandiri
- Buat skenario stash: kerjakan 2 fitur secara bergantian menggunakan
git stash(minimal 3 kali stash) - Buat project dengan minimal 3 tag menggunakan Semantic Versioning yang benar (v0.1.0, v1.0.0, v1.1.0)
- Latihan: gunakan
git stash branchuntuk membuat branch baru dari stash - Push semua tag ke remote repository di GitHub
Praktik Interaktif
Selesaikan level berikut untuk memperkuat pemahaman kamu.