gitstashpenyelamatanMenengah5 mnt baca

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

bash
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:

bash
git stash list
git stash show -p stash@{0} | head -40

git 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

bash
git stash pop

Pop menerapkan stash lalu menghapusnya dari daftar. Tapi kalau branch tujuan sudah berubah di file yang sama, pop bisa konflik seperti merge:

bash
# CONFLICT (content): Merge conflict in app.js

Resolve seperti konflik biasa: edit, git add, lalu karena pop yang konflik TIDAK otomatis menghapus stash-nya, selesaikan manual:

bash
git stash drop   # hapus stash setelah yakin hasil resolve benar

Kenapa 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:

bash
git stash -u
git stash branch fitur-bayar

Git 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

bash
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 baru

Kesalahan 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.