Last chance! 50% off DataCamp Premium
Sale ends in
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.
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.
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.
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.

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.
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.
Sebelum menerapkan stash secara membabi buta, penting untuk memverifikasi isinya. Langkah ini sering dilewatkan, tetapi membantu mencegah kebingungan atau penimpaan yang tidak disengaja.
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.
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.
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.
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.
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.

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

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.
Stash dimaksudkan untuk berumur pendek. Jika dibiarkan menumpuk, akan lebih sulit menemukan yang tepat nanti, dan meningkatkan risiko konflik saat akhirnya Anda menerapkannya.
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.
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.
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:
Saya sarankan melihat tutorial Git Branch untuk mempelajari lebih lanjut pengelolaan cabang demi pengembangan dan kolaborasi yang lebih baik.
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
Meskipun git stash sederhana, beberapa masalah umum bisa menjegal Anda. Berikut beberapa kesalahan yang pernah saya temui serta cara mengenali dan memperbaikinya dengan cepat.
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 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:
git add data_pipeline.py
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}
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.
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.
Tidak, secara default, git stash hanya menyimpan file yang terpantau. Untuk menyertakan file yang tidak terpantau, gunakan git stash -u.
Tidak, stash terpisah dari riwayat commit Anda dan tidak muncul di log cabang Anda.
git stash pop menerapkan stash dan menghapusnya, sedangkan git stash apply menerapkan stash tetapi mempertahankannya di daftar stash.
Masalah ini terjadi ketika direktori kerja Anda bersih, tidak ada file terpantau yang diubah atau di-stage untuk di-stash.
Konflik terjadi ketika bagian file yang sama telah diubah baik di cabang Anda saat ini maupun di perubahan yang di-stash.
Pelajari Git dengan DataCamp
Kursus
Program
Kursus
blogs
Hugo Bowne-Anderson
13 mnt
blogs
Dario Radečić
15 mnt
blogs
David Woods
13 mnt

blogs
Javier Canales Luna
14 mnt