Situasi ini pasti pernah kamu alami: sedang asyik mengerjakan fitur baru di tengah jalan, tiba-tiba ada laporan bug urgent yang harus segera diperbaiki di branch main. Masalahnya, pekerjaan yang setengah jadi tidak layak di-commit. Kamu tidak bisa pindah branch karena ada perubahan yang belum disimpan.
Di sinilah git stash menjadi penyelamat — cara menyimpan perubahan yang belum selesai ke “laci sementara” agar kamu bisa berpindah branch dengan bebas.
Cara Kerja Git Stash
git stash mengambil semua perubahan yang belum di-commit (baik yang sudah di-staging maupun yang belum), menyimpannya ke stack khusus, lalu mengembalikan working directory ke kondisi bersih (HEAD).
Working Directory (kotor) ──git stash──→ Stash Stack (tersimpan)
working directory jadi bersih
Stash Stack ──git stash pop──→ Working Directory (perubahan kembali)
Perintah Dasar Git Stash
Menyimpan ke Stash
# Stash semua perubahan (tracked files)
git stash
# Stash dengan pesan deskriptif (sangat disarankan)
git stash push -m "wip: setengah jalan implementasi fitur login"
# Stash termasuk file untracked (file baru yang belum di-add)
git stash push -u -m "fitur login termasuk file baru"
# Stash termasuk file yang di-.gitignore
git stash push -a -m "stash semuanya termasuk ignored files"
Melihat Daftar Stash
git stash list
Output:
stash@{0}: On feature/login: wip: setengah jalan implementasi fitur login
stash@{1}: On main: WIP on main: b2c3d4e tambah halaman beranda
stash@{2}: WIP on main: a1b2c3d inisialisasi project
Stash terbaru selalu ada di stash@{0}.
Menerapkan Kembali Stash
# Terapkan stash terbaru DAN hapus dari stack
git stash pop
# Terapkan stash tertentu DAN hapus dari stack
git stash pop stash@{1}
# Terapkan stash terbaru tapi TETAP di stack (tidak dihapus)
git stash apply
# Terapkan stash tertentu tapi TETAP di stack
git stash apply stash@{2}
pop = apply + drop. apply = apply saja, stash tetap ada.
Menghapus Stash
# Hapus satu stash
git stash drop stash@{0}
# Hapus semua stash
git stash clear
Workflow Praktis
Skenario 1: Bug Urgent di Tengah Pekerjaan
# Sedang mengerjakan fitur login...
echo "kode setengah jadi" >> src/login.js
# Ada bug urgent! Simpan dulu
git stash push -m "wip: fitur login 60% selesai"
# Pindah ke main dan perbaiki bug
git switch main
git switch -c hotfix/tombol-submit-error
# ... perbaiki bug ...
git commit -am "fix: perbaiki tombol submit yang tidak response"
git switch main
git merge hotfix/tombol-submit-error
git branch -d hotfix/tombol-submit-error
# Kembali ke pekerjaan semula
git switch feature/login
git stash pop
# Lanjutkan dari mana tadi...
Skenario 2: Pindahkan Pekerjaan ke Branch Baru
Kadang kamu baru sadar bahwa pekerjaan yang sedang dilakukan seharusnya ada di branch baru, bukan di main.
# Ups, terlanjur edit file di main
git status
# modified: src/profile.js
# Simpan ke stash
git stash push -m "fitur profil yang salah branch"
# Buat branch yang benar
git switch -c feature/user-profile
# Terapkan stash di branch yang benar
git stash pop
git add .
git commit -m "feat: mulai implementasi profil user"
Stash Sebagian File (Partial Stash)
# Stash secara interaktif — pilih hunk mana yang disimpan
git stash push -p -m "stash sebagian perubahan"
# Stash file tertentu saja
git stash push src/auth.js src/login.js -m "stash file auth saja"
Melihat Isi Stash
# Lihat ringkasan perubahan di stash terbaru
git stash show
# Lihat diff detail stash terbaru
git stash show -p
# Lihat diff detail stash tertentu
git stash show -p stash@{1}
Membuat Branch dari Stash
Jika stash sulit di-apply karena konflik dengan perubahan terbaru, buat branch baru langsung dari stash:
# Buat branch baru dari titik saat stash dibuat, lalu apply stash
git stash branch nama-branch-baru stash@{0}
Perintah ini:
- Membuat branch baru dari commit di mana stash dibuat
- Checkout ke branch tersebut
- Menerapkan stash
- Menghapus stash jika berhasil
Stash dan Konflik
Jika git stash pop menghasilkan konflik, selesaikan seperti merge conflict biasa:
git stash pop
# CONFLICT: src/auth.js
# Edit dan selesaikan konflik
nano src/auth.js
# Stage file yang sudah diselesaikan
git add src/auth.js
# Stash sudah diterapkan tapi tidak otomatis dihapus jika konflik
# Hapus manual setelah selesai
git stash drop
Tips Menggunakan Git Stash
- Selalu beri pesan —
git stash push -m "deskripsi"jauh lebih berguna dari stash tanpa nama - Stash bukan backup — jangan andalkan stash untuk penyimpanan jangka panjang, gunakan commit WIP atau branch
popvsapply— gunakanapplyjika tidak yakin stash akan berhasil diterapkan tanpa konflik, sehingga stash tetap aman- Bersihkan stash lama —
git stash listyang panjang adalah tanda stash yang terlupakan
Kesimpulan
git stash adalah alat yang sangat praktis untuk menginterupsi pekerjaan tanpa harus membuat commit yang belum siap. Dengan memahami push, pop, apply, dan list, kamu bisa berpindah konteks dengan lancar tanpa kehilangan pekerjaan yang sedang berjalan.
Di artikel berikutnya, kita keluar dari lingkungan lokal dan masuk ke dunia remote repository — memahami GitHub dan cara menghubungkan repository lokal ke remote.
Kiki/🎮🍉⌨️🍩💻