Kursus
Anda sedang mengerjakan sebuah fitur baru di pipeline data ketika laporan bug mendesak masuk. Direktori kerja Anda penuh dengan perubahan yang belum selesai. Anda belum siap melakukan commit, tetapi perlu segera beralih cabang.
Dalam tutorial ini, saya akan menunjukkan cara menggunakan seluruh rangkaian perintah git stash. Anda akan mempelajari cara menyimpan, memeriksa, memulihkan, melakukan stash selektif, dan merapikan stash di Git. Untuk pembelajaran lebih lanjut, saya sarankan mengikuti Introduction to GitHub Concepts untuk mempelajari lebih banyak tentang kontrol versi dan bekerja dengan repository di GitHub.
Apa Itu Git stash?
git stash adalah perintah Git yang sementara menaruh perubahan Anda yang belum di-commit sehingga Anda dapat kembali ke direktori kerja yang bersih, tanpa membuat commit Git. Ini memudahkan beralih cabang atau menangani pekerjaan mendesak tanpa kehilangan progres.
Stash disimpan dalam tumpukan LIFO (last-in, first-out). Stash terbaru selalu stash@{0}, diikuti stash@{1}, dan seterusnya.
Secara default, git stash menyimpan file terpantau yang telah diubah dan perubahan yang sudah di-stage (dari index). Namun, ini tidak termasuk file baru yang tidak terpantau dan file yang diabaikan seperti yang ada di .gitignore.
Cara Menyimpan Perubahan dengan git stash
Di bagian ini, saya akan memandu Anda melalui tiga cara umum untuk melakukan stash perubahan. Kita akan menggunakan skenario yang konsisten: anggap Anda bekerja pada proyek pipeline data dengan file data_pipeline.py, config.yaml, dan tests/test_pipeline.py.
Stash perubahan yang terpantau
Karena git stash menyimpan perubahan yang dimodifikasi atau di-stage, jalankan git status untuk memeriksa status file di direktori kerja Anda. Setelah menjalankan git stash, baik perubahan terpantau yang di-stage maupun yang belum di-stage akan disimpan, sehingga Anda memiliki direktori kerja yang bersih.

Sertakan perubahan yang tidak terpantau dan file baru
Secara default, git stash mengabaikan file yang belum pernah ditambahkan ke repository. Jika Anda membuat file pengujian baru, stash standar akan membiarkannya tetap berada di direktori Anda, yang dapat menimbulkan masalah saat beralih cabang.

Jika Anda menjalankan git stash, file itu akan tetap ada. Untuk menyertakannya, gunakan perintah -u atau --include-untracked:
git stash -u

Untuk menyertakan semua file, termasuk yang diabaikan secara eksplisit oleh .gitignore, Anda dapat menggunakan git stash --all atau -a. Namun, Anda harus berhati-hati, karena ini dapat menyapu file seperti log atau artefak build tanpa sengaja.
Beri nama pada stash Anda
Saat menggunakan git stash, pesan default seperti WIP on main akan membingungkan jika Anda memiliki banyak stash. Untuk menghindari masalah ini, selalu tambahkan pesan deskriptif saat Anda ingin push stash tersebut.
git stash push -m "refactor pipeline config handling."
Anda dapat menggunakan perintah git stash list untuk melihat dan membandingkan daftar stash. Perhatikan perbedaan antara stash yang diberi nama dan stash default.

Menggunakan pesan yang jelas membuatnya jauh lebih mudah mengidentifikasi stash yang tepat nanti, terutama saat menangani banyak tugas atau berkolaborasi dengan tim.
Saya merekomendasikan mencoba GitHub Foundations dan Git Fundamentals untuk mempelajari kontrol versi dengan Git dari dasar hingga alur kerja tingkat lanjut, termasuk melacak perubahan, mengelola repository, dan berkolaborasi secara efisien.
Cara Melihat dan Memeriksa Stash Anda
Sebelum menerapkan stash secara membabi buta, penting untuk memverifikasi isinya. Langkah ini sering dilewatkan, tetapi membantu mencegah kebingungan atau penimpaan yang tidak disengaja.
git stash list: Daftar semua stash
Gunakan perintah berikut untuk melihat tumpukan stash Anda:
git stash list

Sekarang Anda seharusnya tahu bahwa stash mengikuti urutan LIFO (last-in, first-out). Stash terbaru selalu stash@{0}, dan setiap stash baru mendorong yang lebih lama turun di tumpukan.
git stash show: Memeriksa stash sebelum menerapkan
Untuk ringkasan cepat perubahan dalam sebuah stash, Anda dapat menggunakan perintah show pada stash tertentu. Misalnya, perintah di bawah menampilkan perubahan yang dibuat pada stash terbaru:
git stash show stash@{0}

Untuk melihat perubahan kode yang sebenarnya (diff penuh), gunakan perintah di bawah untuk menampilkan semua perubahan baris demi baris yang disimpan dalam stash tersebut.
git stash show -p stash@{0}

Sebagai praktik terbaik, selalu periksa stash sebelum menerapkannya, terutama jika sudah beberapa hari atau Anda tidak yakin isinya.
Cara Memulihkan Perubahan yang Di-stash
Setelah Anda menyimpan pekerjaan dengan git stash, Anda memerlukan cara untuk mengembalikannya. Ada dua metode utama untuk memulihkan stash, termasuk cara menargetkan stash tertentu berdasarkan indeksnya.
git stash pop: terapkan dan hapus
Ini adalah cara paling umum untuk memulihkan stash. Ini mengambil stash teratas (stash@{0}), menerapkan perubahan ke cabang saat ini, lalu menghapus stash tersebut dari tumpukan.
git stash pop

Setelah menjalankan pop, perubahan Anda dipulihkan, dan stash dihapus. Karena itu, gunakan pop saat Anda yakin telah selesai dengan status tersimpan tersebut dan ingin menjaga daftar stash tetap rapi.
Untuk pemahaman lebih mendalam tentang perintah pop, saya sarankan melihat tutorial Git Stash Pop untuk mempelajari cara menyimpan pekerjaan yang belum di-commit saat beralih cabang di repo Anda.
git stash apply: terapkan dan pertahankan
Jika Anda ingin memulihkan perubahan tetapi mempertahankan stash untuk digunakan ulang, gunakan perintah apply sebagai berikut:
git stash apply stash@{1}

Perhatikan bahwa merujuk stash berdasarkan indeks stash@{1} menargetkan stash tertentu untuk dipulihkan. Metode ini berguna saat Anda ingin menerapkan perubahan yang sama di beberapa cabang, seperti penyesuaian konfigurasi bersama yang perlu masuk ke main dan staging.
Anda dapat menggunakan git stash list untuk memastikan stash masih ada setelah menggunakan perintah apply.

Cara Melakukan Stash secara Selektif
Dalam proyek dunia nyata, perubahan Anda sering tercampur. Untuk skenario seperti itu, Anda mungkin ingin men-stash hanya sebagian pekerjaan sambil mempertahankan sisanya. Git menyediakan dua metode untuk kontrol yang lebih rinci.
git stash push -m: Stash file tertentu
Jika Anda tahu persis file mana yang perlu disisihkan, Anda dapat men-stash hanya file yang dipilih dengan menentukan path-nya:
Sebagai contoh, perintah di bawah hanya men-stash file data_pipeline.py. Ini berguna saat Anda ingin menghentikan sementara pekerjaan pada fitur eksperimental sambil mempertahankan perbaikan bug yang di-stage dan siap di-commit.
git stash push -m "stash experimental pipeline logic" data_pipeline.py
Untuk memeriksa apakah perintah Anda berhasil dieksekusi, gunakan git status untuk menampilkan kondisi sebelum dan sesudah repo Anda.

git stash push -p -m: Stash hunk tertentu secara interaktif
Terkadang, Anda memiliki kode “baik” dan kode “WIP” dalam file yang sama. Dalam kasus ini, gunakan flag -p atau --patch untuk memicu sesi interaktif. Ini memungkinkan Anda memilih potongan (“hunk”) perubahan tertentu dalam sebuah file.
git stash push -p -m "Selective stash of pipeline logic"

Anda akan melihat keluaran “Stash this hunk” dengan opsi berikut:
-
y: Ya, stash hunk ini -
n: Tidak, lewati hunk ini -
q: Keluar; jangan men-stash hunk ini atau yang tersisa. -
a: Semua; stash hunk ini dan semua hunk berikutnya di file. -
d: Hapus; jangan men-stash hunk ini atau hunk berikutnya di file. -
?: bantuan
Perlu dicatat bahwa alur kerja ini sangat mirip dengan git add -p. Ini berguna saat perubahan dalam file yang sama tidak saling terkait dan perlu ditangani secara terpisah.
Cara Merapikan Stash Anda
Stash dimaksudkan untuk berumur pendek. Jika dibiarkan menumpuk, akan lebih sulit menemukan yang tepat nanti, dan meningkatkan risiko konflik saat akhirnya Anda menerapkannya.
git stash drop: Hapus stash tertentu
Untuk menghapus satu stash, gunakan git stash drop dengan indeksnya. Misalnya, perintah di bawah menghapus stash ke-4 dalam daftar.
git stash drop stash@{3}

Dari contoh di atas, Anda dapat melihat daftar stash berkurang, dan stash yang tersisa diindeks ulang setelah penghapusan.
git stash clear: Hapus semua stash
Untuk menghapus semua stash sekaligus, gunakan:
git stash clear
Perintah ini tidak menghasilkan keluaran saat berhasil, dan Anda dapat memverifikasi dengan menjalankan git stash list.

Saya sarankan Anda ekstra hati-hati saat menggunakan git stash clear karena tindakan ini permanen dan tidak ada fitur undo bawaan. Jalankan hanya ketika Anda yakin tidak lagi membutuhkan pekerjaan yang di-stash.
git stash branch: Ubah stash menjadi cabang
Jika cabang Anda saat ini telah banyak berdivergensi sejak Anda membuat stash, menerapkannya dapat menyebabkan konflik merge. Dalam kasus itu, Anda dapat membuat cabang baru langsung dari stash:
git stash branch pipeline-fix stash@{1}

Perintah di atas melakukan hal-hal berikut:
- Membuat cabang baru dari commit asli tempat stash dibuat
- Menerapkan stash
- Menghapusnya dari daftar stash
Saya sarankan melihat tutorial Git Branch untuk mempelajari lebih lanjut pengelolaan cabang demi pengembangan dan kolaborasi yang lebih baik.
Perintah Git Stash Lain yang Perlu Diketahui
Di luar alur kerja umum, berikut adalah beberapa perintah git stash tingkat lanjut yang perlu Anda ketahui:
-
git stash create: Membuat objek stash tanpa menambahkannya ke daftar stash -
git stash store: Menyimpan stash yang dibuat dengan create -
git stash export: Mengekspor stash ke sebuah referensi atau mencetaknya -
git stash import: Mengimpor stash dari commit yang ada
Kesalahan Umum dan Cara Memperbaikinya
Meskipun git stash sederhana, beberapa masalah umum bisa menjegal Anda. Berikut beberapa kesalahan yang pernah saya temui serta cara mengenali dan memperbaikinya dengan cepat.
No local changes to save
Ini adalah “bukan error” yang paling sering. Terjadi saat Anda menjalankan git stash pada direktori kerja yang bersih di mana tidak ada file terpantau yang diubah atau di-stage.
Untuk memperbaiki masalah ini, jalankan git status, dan jika tidak ada yang muncul, berarti tidak ada yang perlu di-stash.

Konflik saat menerapkan stash
Konflik terjadi ketika cabang tempat Anda berada mengubah baris kode yang sama yang ada di stash Anda. Misalnya, saat Anda menjalankan git stash pop di cabang baru setelah memodifikasi file, Anda kemungkinan akan mendapatkan pesan error:

Anda kemudian mungkin melihat penanda konflik di dalam file:

Untuk memperbaiki masalah ini, Anda dapat melakukan salah satu dari berikut:
- Menyelesaikan konflik secara manual di file
- Stage file yang sudah diselesaikan
git add data_pipeline.py
- Hapus stash secara manual menggunakan
git stash drop(jika TIDAK dihapus otomatis saat konflik)
Jika konflik terlalu berantakan, gunakan perintah di bawah untuk menerapkan perubahan ke “kanvas” yang bersih sebagai gantinya.
git stash branch recovery-branch stash@{0}
Tidak sengaja men-stash file yang tidak Anda maksud
Terkadang Anda menjalankan git stash tanpa memeriksa direktori kerja, baru menyadari kemudian bahwa Anda telah menyembunyikan perbaikan yang sebenarnya ingin di-commit.
Untuk menghindari kesalahan semacam itu, selalu jelaskan file mana yang akan di-stash. Misalnya, perintah di bawah hanya akan men-stash file data_pipeline.py alih-alih semuanya di direktori kerja.
git stash push data_pipeline.py
Anda juga dapat menggunakan git stash -p untuk menjalankan mode interaktif (patch), memungkinkan Anda men-stash bagian perubahan secara selektif dalam file, bukan seluruh file.
Sebagai langkah pencegahan, selalu periksa git status sebelum melakukan stash.
Kesimpulan
Sebagai pedoman umum, buat stash berumur pendek dan selalu gunakan pesan yang deskriptif. Jika Anda tidak akan kembali ke pekerjaan itu dalam sehari, membuat cabang WIP adalah opsi yang lebih aman karena dapat di-push ke remote dan tidak akan hilang.
Untuk membangun keterampilan Git yang lebih kuat, saya sarankan mengambil Intermediate Git untuk mempelajari kolaborasi di Git. Saya juga merekomendasikan Advanced Git untuk mempelajari cara bekerja dengan Git untuk proyek besar dan menangani skenario kontrol versi yang kompleks serta isu dalam pengembangan pipeline data.
FAQ Git Stash
Apakah git stash menyimpan file yang tidak terpantau?
Tidak, secara default, git stash hanya menyimpan file yang terpantau. Untuk menyertakan file yang tidak terpantau, gunakan git stash -u.
Apakah git stash memengaruhi riwayat commit saya?
Tidak, stash terpisah dari riwayat commit Anda dan tidak muncul di log cabang Anda.
Apa perbedaan antara git stash pop dan git stash apply?
git stash pop menerapkan stash dan menghapusnya, sedangkan git stash apply menerapkan stash tetapi mempertahankannya di daftar stash.
Mengapa Git mengatakan “No local changes to save”?
Masalah ini terjadi ketika direktori kerja Anda bersih, tidak ada file terpantau yang diubah atau di-stage untuk di-stash.
Apa yang menyebabkan konflik saat memulihkan stash?
Konflik terjadi ketika bagian file yang sama telah diubah baik di cabang Anda saat ini maupun di perubahan yang di-stash.

