Pertemuan Pertemuan 17

Git Stash & Git Tag

Pertemuan 17 / 32
Intermediate Modul 2.3 60 menit
Pertemuan 17

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

BagianContohKapan Berubah
MAJOR1.0.0Perubahan besar yang tidak kompatibel (breaking changes)
MINOR1.1.0Fitur baru yang tetap kompatibel (backward compatible)
PATCH1.1.1Perbaikan bug kecil

Contoh:

  • 1.0.0 -> 2.0.0: API berubah total, kode lama mungkin tidak berjalan
  • 1.0.0 -> 1.1.0: Ditambah fitur baru, kode lama tetap berjalan
  • 1.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

  1. Buat skenario stash: kerjakan 2 fitur secara bergantian menggunakan git stash (minimal 3 kali stash)
  2. Buat project dengan minimal 3 tag menggunakan Semantic Versioning yang benar (v0.1.0, v1.0.0, v1.1.0)
  3. Latihan: gunakan git stash branch untuk membuat branch baru dari stash
  4. Push semua tag ke remote repository di GitHub

Praktik Interaktif

Selesaikan level berikut untuk memperkuat pemahaman kamu.

Learn Git Branching β€” Level: mixed4
Buka di tab baru
Memuat Learn Git Branching...