Jika saya bekerja di cabang A dan tiba-tiba perlu bekerja di cabang B sebelum siap dengan komit di cabang A, saya menyimpan perubahan saya di A, checkout B, melakukan pekerjaan saya di sana, lalu checkout A dan menerapkan simpanan.
Jika saya bekerja di A dan saya ingin berhenti bekerja untuk hari itu, haruskah saya menyimpan pekerjaan saya dan kemudian menerapkannya keesokan harinya (ketika saya melanjutkan pekerjaan saya), atau haruskah saya membiarkan hal-hal sebagaimana adanya — file modifikasi yang tidak terikat di direktori kerja? Saya tidak mengerti mengapa saya perlu menggunakan simpanan dalam kasus ini, kecuali jika ada beberapa manfaat keamanan.
Juga, skenario lain: Saya bekerja di tempat kerja dan di rumah. Jika saya belum siap dengan commit ketika saya ingin pulang, dapatkah saya menyimpan pekerjaan saya, mendorongnya ke GitHub dan kemudian menarik simpanan itu di rumah?
Jawaban:
Stash hanyalah metode kenyamanan. Karena cabang sangat murah dan mudah dikelola di git, saya pribadi hampir selalu lebih suka membuat cabang sementara yang baru daripada menyimpannya, tetapi ini lebih banyak masalah selera.
Satu tempat yang saya suka menyembunyikan adalah jika saya menemukan bahwa saya lupa sesuatu di komit terakhir saya dan sudah mulai mengerjakan yang berikutnya di cabang yang sama:
sumber
git stash pop
dua kali, Anda akan kehilangan perbedaan antara dua set perubahan tersebut.git stash push
. Alasan utama untuk ini adalah yanggit stash push
memperkenalkan opsi untuk menyembunyikan pathspec yang dipilih , sesuatu yanggit stash save
tidak mendukung.Saya akan memecahkan jawaban pada tiga paragraf.
Bagian 1:
git stash
(Untuk menyimpan perubahan yang tidak dikomit dalam "simpanan". Catatan: ini menghapus perubahan dari pohon kerja!)git checkout some_branch
(ubah ke cabang yang dituju - dalam hal inisome_branch
)git stash list
(daftar simpanan)git stash apply
(untuk menerapkan simpanan ke pohon kerja di cabang saat ini)git stash apply stash@{12}
(jika Anda memiliki banyak simpanan, Anda dapat memilih simpanan apa yang akan diterapkan - dalam hal ini kami menerapkan simpanan12
)git stash drop stash@{0}
(untuk menghapus dari daftar simpanan - dalam hal ini simpanan0
)git stash pop stash@{1}
(untuk menerapkan simpanan yang dipilih dan melepaskannya dari daftar simpanan)Bagian 2:
Anda dapat menyembunyikan perubahan Anda dengan perintah ini tetapi tidak perlu.
Anda dapat melanjutkan keesokan harinya tanpa simpanan.
Perintah ini untuk menyembunyikan perubahan Anda dan bekerja di cabang yang berbeda atau untuk implementasi beberapa realisasi kode Anda dan simpan dalam simpanan tanpa cabang dan komitor kasus khusus Anda!
Dan nanti Anda dapat menggunakan beberapa simpanan dan memeriksa mana yang lebih baik.
Bagian 3:
Perintah Stash untuk menyembunyikan perubahan lokal Anda.
Jika Anda ingin bekerja dari jarak jauh, Anda harus berkomitmen dan mendorong.
sumber
Ide utamanya adalah
Jadi pada dasarnya perintah Stash menyimpan beberapa perubahan yang tidak Anda perlukan atau inginkan saat ini; tetapi Anda mungkin membutuhkannya.
sumber
Anda dapat menggunakan perintah berikut:
Untuk menyimpan perubahan yang belum Anda lakukan
git stash
Untuk mencantumkan simpanan Anda yang disimpan
git stash list
Untuk menerapkan / mendapatkan kembali perubahan tidak terikat di mana x adalah 0,1,2 ...
git stash apply stash@{x}
Untuk menerapkan simpanan dan menghapusnya dari daftar simpanan
git stash pop stash@{x}
Untuk menerapkan simpanan dan menyimpannya dalam daftar simpanan
git stash apply stash@{x}
sumber
Jika Anda menekan
git stash
saat Anda memiliki perubahan dalam copy pekerjaan (bukan di area pementasan), git akan membuat objek yang disimpan dan mendorong ke tumpukan simpanan (seperti yang Anda lakukangit checkout -- .
tetapi Anda tidak akan kehilangan perubahan). Nanti, Anda dapat keluar dari atas tumpukan.sumber
Perintah stash akan menyembunyikan setiap perubahan yang Anda buat sejak terakhir kali Anda komit. Dalam kasus Anda, tidak ada alasan untuk menyimpan jika Anda akan terus mengerjakannya pada hari berikutnya. Saya hanya akan menggunakan simpanan untuk membatalkan perubahan yang tidak ingin Anda lakukan.
sumber
git stash
tidak akan mengubah cabang Anda. Ini terutama tidak akan "mengembalikan" setiap perubahan yang dilakukan. Ini hanya akan (sementara) membuang semua perubahan yang tidak dilakukan pada file Anda. - Mungkin terdengar pilih-pilih, tapi kata-kata semacam itu memiliki arti yang sangat khusus dalam konteks git. Anda seharusnya tidak mencampurkannya.git stash
tidak akan menyentuh komit apa pun dan karenanya tidak akan mengubah cabang sama sekali. Ia tidak akan "menghapus" apapun dari cabang dan tidak akan "mengatur ulang" dengan cara apapun. Cabang tetap sama, hanya file di pohon kerja yang berubah. - Itu adalah dua hal yang sangat berbeda.Saya tahu StackOverflow bukanlah tempat untuk jawaban berdasarkan opini, tetapi saya sebenarnya memiliki pendapat yang baik tentang kapan harus menunda perubahan dengan simpanan.
Anda tidak ingin melakukan perubahan eksperimental
Ketika Anda membuat perubahan di ruang kerja / pohon kerja Anda, jika Anda perlu melakukan operasi berbasis cabang seperti merge, push, fetch atau pull, Anda harus berada pada titik komit yang bersih. Jadi jika Anda memiliki perubahan ruang kerja, Anda perlu mengkomitnya. Tetapi bagaimana jika Anda tidak ingin melakukannya? Bagaimana jika mereka eksperimental? Sesuatu yang tidak Anda inginkan menjadi bagian dari riwayat komit Anda? Sesuatu yang Anda tidak ingin dilihat orang lain saat Anda melakukan push ke GitHub?
Anda tidak ingin kehilangan perubahan lokal dengan hard reset
Dalam hal ini, Anda dapat melakukan hard reset. Tetapi jika Anda melakukan hard reset, Anda akan kehilangan semua perubahan pohon kerja lokal Anda karena semuanya akan ditimpa ke tempatnya pada saat komit terakhir dan Anda akan kehilangan semua perubahan Anda.
Jadi, untuk jawaban 'kapan harus Anda simpan', jawabannya adalah ketika Anda perlu kembali ke titik komit yang bersih dengan pohon kerja / indeks / komit yang disinkronkan, tetapi Anda tidak ingin kehilangan perubahan lokal Anda di proses. Simpan saja perubahan Anda dalam simpanan dan Anda baik-baik saja.
Dan setelah Anda selesai menyimpan dan kemudian digabungkan atau ditarik atau didorong, Anda dapat menyimpan pop atau menerapkan dan Anda kembali ke tempat Anda memulai.
Git stash dan GitHub
GitHub terus menambahkan fitur baru, tetapi untuk saat ini, sekarang ada cara untuk menyimpan simpanan di sana. Sekali lagi, gagasan simpanan adalah bahwa itu lokal dan pribadi. Tidak ada orang lain yang dapat mengintip ke dalam simpanan Anda tanpa akses fisik ke workstation Anda. Mirip dengan cara git reflog bersifat privat dengan git log bersifat publik. Mungkin tidak akan menjadi pribadi jika didorong ke GitHub.
Salah satu trik yang mungkin dilakukan adalah melakukan diff pada ruang kerja Anda, memeriksa perbedaan tersebut ke dalam repositori git Anda, komit dan kemudian tekan. Kemudian Anda dapat melakukan penarikan dari rumah, dapatkan perbedaannya dan kemudian lepaskan. Tapi itu cara yang cukup berantakan untuk mencapai hasil tersebut.
sumber