Stash Lanjutan: -u, Pop Konflik, dan Branch
Selamatkan file untracked dengan stash -u, atasi konflik saat stash pop, dan pindahkan stash ke branch baru.
Lubang pada stash biasa
git stash standar hanya menyimpan file yang tracked (sudah pernah di-commit) dan dimodifikasi. File BARU yang belum pernah di-add (untracked) ditinggal begitu saja di working tree. Akibatnya skenario klasik: kamu stash untuk pindah branch, tapi file barumu ikut kebawa dan mengotori branch tujuan, atau malah menimpa file di sana. Kenapa stash berperilaku begitu? Karena default-nya konservatif: Git tidak menyentuh file yang belum ia kenal kecuali diminta eksplisit.
stash -u: bawa file untracked sekalian
git stash -u -m "wip fitur bayar + file baru"Flag -u (atau --include-untracked) memasukkan file untracked ke dalam stash. Working tree-mu menjadi benar-benar bersih, siap pindah branch. Kapan dipakai? Hampir selalu, saat tujuanmu adalah "kosongkan working tree total". Kebiasaan baik: selalu tambah -m dengan pesan, karena tumpukan stash tanpa pesan ("WIP on main") mustahil dibedakan seminggu kemudian.
Cek isi stash sebelum pop:
git stash list
git stash show -p stash@{0} | head -40git stash show -p menampilkan diff isi stash tanpa menerapkannya. Ini cara aman mengintip "apa sih yang kusimpan waktu itu" sebelum pop.
Saat stash pop konflik
git stash popPop menerapkan stash lalu menghapusnya dari daftar. Tapi kalau branch tujuan sudah berubah di file yang sama, pop bisa konflik seperti merge:
# CONFLICT (content): Merge conflict in app.jsResolve seperti konflik biasa: edit, git add, lalu karena pop yang konflik TIDAK otomatis menghapus stash-nya, selesaikan manual:
git stash drop # hapus stash setelah yakin hasil resolve benarKenapa pop tidak menghapus stash saat konflik? Sebagai pengaman: kalau resolve-mu salah, stash aslinya masih ada dan bisa dicoba lagi. Jangan drop sebelum hasil akhirnya benar-benar oke.
Alternatif aman: git stash apply (terapkan tanpa menghapus dari daftar). Pakai apply saat kamu tidak yakin dan ingin stash-nya tetap tersimpan sebagai cadangan.
git stash branch: pindahkan ke branch baru
Skenario: kamu terlanjur ngoding di branch yang salah (misalnya langsung di main), dan sekarang ingin pekerjaan itu pindah ke branch fitur yang proper. Jangan pop lalu commit di main. Lakukan:
git stash -u
git stash branch fitur-bayarGit membuat branch baru fitur-bayar dari commit tempat stash dibuat, menerapkan stash di sana, dan menghapus stash dari daftar, semua dalam satu perintah. Kenapa ini lebih baik daripada pop manual? Karena stash "mengingat" commit asalnya. Kalau kamu pop di commit yang sudah jauh berbeda, risiko konflik besar. git stash branch mengembalikanmu ke titik asal yang tepat sebelum menerapkan.
Alur penyelamatan lengkap
git stash -u -m "pindah ke branch benar"
git stash branch fitur-bayar
git stash list # kosong, stash sudah jadi branch
git log --oneline -3 # pekerjaanmu aman di branch baruKesalahan umum pemula
Salah: git stash tanpa -u, pindah branch, lalu file untracked ikut terbawa dan menimpa file penting di branch tujuan.
Benar: kalau niatmu mengosongkan total, selalu git stash -u. Jadikan -u sebagai default mental.
Salah: setelah git stash pop konflik, langsung git stash drop sebelum memeriksa hasil resolve, sehingga cadangan hilang dan konflik harus diulang dari nol.
Benar: resolve dulu, pastikan aplikasi jalan, baru drop. Atau pakai git stash apply kalau masih ragu, drop belakangan.
Tantangan
Selamatkan kerjaan dari branch yang salah
Di repo latihan, buat perubahan plus satu file baru langsung di main. Simpan dengan git stash -u -m, lalu pindahkan ke branch baru dengan git stash branch. Verifikasi main kembali bersih dan branch baru memuat pekerjaanmu.