Stash: Menyimpan Pekerjaan Sementara
Menitipkan perubahan yang belum selesai agar bisa berpindah branch, lalu mengambilnya kembali.
Skenario klasik
Kamu sedang setengah jalan mengerjakan fitur dan kodenya belum layak di-commit. Tiba-tiba ada bug mendesak di main yang harus diperbaiki sekarang. Berpindah branch dengan perubahan menggantung bisa gagal:
error: Your local changes to the following files would be overwritten by checkout:
keranjang.html
Please commit your changes or stash them before you switch branches.
Aborting
Meng-commit kode setengah jadi bukan pilihan bagus. Solusinya: git stash — menyimpan perubahan ke "laci" sementara dan mengembalikan working directory ke bersih.
Perintah stash
git stash push -m "keranjang setengah jadi" # simpan (beri nama agar mudah dikenali)
git stash list # lihat isi laci
git stash pop # ambil yang paling atas, lalu hapus dari laci
git stash apply # ambil tanpa menghapus dari laci
git stash drop # buang entri teratas
git stash clear # kosongkan laci
git stash saja (tanpa push) juga bekerja dan menamai otomatis WIP on main: <hash> <pesan commit>.
Alur lengkap
git stash push -m "WIP keranjang"
git switch main
# ...perbaiki bug...
git commit -am "Perbaiki typo judul halaman utama"
git switch fitur-keranjang
git stash pop
Apa yang disimpan?
- Secara default: perubahan pada berkas yang sudah dilacak (staged dan belum staged).
- Berkas baru (untracked) tidak ikut — tambahkan
-u(--include-untracked) bila perlu. - Berkas yang diabaikan
.gitignoretidak ikut.
Menyimpan banyak stash
Laci bersifat tumpukan (stack): entri baru ada di atas (stash@{0}). git stash pop stash@{1} mengambil entri tertentu. Beri nama agar tidak lupa isi tiap entri.
Bila pop menimbulkan konflik
Jika kode di branch sudah berubah sehingga stash tidak bisa diterapkan bersih, Git menandai konflik seperti pada merge dan tidak menghapus entri stash. Selesaikan konfliknya, lalu git stash drop setelah yakin.
Stash bukan tempat penyimpanan jangka panjang
Stash mudah terlupakan. Untuk pekerjaan yang akan lama tertunda, lebih baik commit di branch sementara (wip/...) — itu juga ikut ter-backup saat di-push.