Saya tidak dapat menerapkan simpanan kembali ke direktori kerja.
Cerita kecil:
Pertama saya mencoba untuk mendorong beberapa perubahan yang berkomitmen, tetapi dikatakan: "tidak, Anda tidak bisa, tarik dulu" ... Oke, saya akan menarik sesuatu dari GitHub dan kemudian mendorong perubahan saya. Ketika saya mencoba menarik, dikatakan bahwa saya memiliki perubahan yang akan ditimpa, dan bahwa saya harus menyembunyikan perubahan saya. Oke, saya menyembunyikan perubahan ... melakukan tarikan, dan mendorong perubahan yang dilakukan. Tapi sekarang, saya tidak dapat memulihkan perubahan tidak terikat yang sedang saya kerjakan.
Ini adalah kesalahannya:
MyPath/File.cs already exists, no checkout
Could not restore untracked files from stash
Yang pasti saya belum memahami semua konsep git, mereka sedikit membingungkan saya ... mungkin saya melakukan sesuatu yang salah.
Akan sangat bagus jika seseorang dapat membantu saya menyelesaikan ini ... Saya telah mencari di Google dan semuanya selama lebih dari satu jam sekarang, dan saya belum menemukan solusi.
Bantuan sangat dihargai. Terima kasih!
git stash
akan membantu dengan cepat membuat cadangan perubahan lokal. Menghapus sekumpulan file secara manual untuk memulihkannya akan merusak alur. Thegit stash branch
pendekatan dalam jawaban lain terdengar lebih baik, tetapi masih jauh lebih manual dari yang diinginkan.Cara teraman dan termudah mungkin adalah menyembunyikan barang lagi:
Setelah itu jika Anda senang dengan hasilnya, Anda dapat menelepon
untuk menghapus simpanan "aman" Anda.
sumber
apply
bukanpop
.pop
adalah kombinasi dariapply
dandrop
, tetapi hanya akandrop
jikaapply
bekerja tanpa konflik. Tapi ya,apply
biasanya lebih aman.Seperti yang disebutkan oleh @bentolo, Anda dapat secara manual menghapus file yang dikeluhkan, berpindah cabang, dan kemudian menambahkannya kembali secara manual. Tapi saya pribadi lebih suka tinggal "dalam git".
Cara terbaik untuk melakukannya adalah dengan mengubah simpanan menjadi cabang. Setelah itu adalah sebuah cabang, Anda dapat bekerja secara normal di git menggunakan teknik / alat yang berhubungan dengan cabang yang Anda kenal dan sukai. Ini sebenarnya adalah teknik umum yang berguna untuk bekerja dengan simpanan bahkan ketika Anda tidak memiliki kesalahan yang terdaftar. Ini bekerja dengan baik karena simpanan benar-benar komit di bawah selimut (lihat PS).
Mengonversi simpanan menjadi cabang
Berikut ini membuat cabang berdasarkan HEAD saat simpanan dibuat dan kemudian menerapkan simpanan (tidak mengikatnya).
Bekerja dengan "cabang simpanan"
Apa yang Anda lakukan selanjutnya bergantung pada hubungan antara simpanan dan di mana cabang target Anda (yang akan saya sebut ORIGINALBRANCH) sekarang.
Opsi 1 - Rebase stash branch secara normal (banyak perubahan sejak simpanan)
Jika Anda telah melakukan banyak perubahan di ORIGINALBRANCH, mungkin sebaiknya Anda memperlakukan STASHBRANCH seperti cabang lokal lainnya. Komit perubahan Anda di STASHBRANCH, rebase ulang di ORIGINALBRANCH, lalu alihkan ke ORIGINALBRANCH dan rebase / gabungkan perubahan STASHBRANCH di atasnya. Jika ada konflik maka tangani dengan normal (salah satu keuntungan dari pendekatan ini adalah Anda dapat melihat dan menyelesaikan konflik).
Opsi 2 - Setel ulang cabang asli agar sesuai dengan simpanan (perubahan terbatas sejak simpanan)
Jika Anda hanya menyimpan sambil menyimpan beberapa perubahan bertahap, lalu berkomitmen, dan yang ingin Anda lakukan hanyalah mendapatkan perubahan tambahan yang tidak dipentaskan saat Anda menyimpannya, Anda dapat melakukan hal berikut. Ini akan beralih kembali ke cabang dan indeks asli Anda tanpa mengubah copy pekerjaan Anda. Hasil akhirnya akan menjadi perubahan simpanan tambahan dalam copy pekerjaan Anda.
Latar Belakang
Stash adalah komit seperti cabang / tag (bukan tambalan)
PS, Sangat menggoda untuk memikirkan simpanan sebagai tambalan (seperti tergoda untuk menganggap komit sebagai tambalan), tetapi simpanan sebenarnya adalah komit terhadap HEAD ketika dibuat. Saat Anda menerapkan / pop Anda melakukan sesuatu yang mirip dengan memetik ceri ke cabang Anda saat ini. Ingatlah bahwa cabang dan tag sebenarnya hanya referensi untuk komit, jadi dalam banyak hal simpanan, cabang, dan tag hanyalah cara berbeda untuk menunjuk komit (dan riwayatnya).
Terkadang dibutuhkan bahkan saat Anda belum membuat perubahan direktori kerja
PPS, Anda mungkin memerlukan teknik ini setelah menggunakan simpanan dengan --patch dan / atau --include-untracked. Bahkan tanpa mengubah direktori kerja, opsi-opsi itu terkadang dapat membuat simpanan yang tidak bisa Anda terapkan kembali begitu saja. Saya harus mengakui tidak sepenuhnya mengerti mengapa. Lihat http://git.661346.n2.nabble.com/stash-refuses-to-pop-td7453780.html untuk beberapa diskusi.
sumber
git stash show -p
membantu di sana untuk membuat simpanan -> * patch *.Solusinya: Anda perlu menghapus file yang dimaksud, lalu coba simpan pop / apply lagi dan file tersebut akan berhasil. Jangan hapus file lain, hanya yang disebutkan oleh kesalahan.
Masalahnya: Git terkadang menyebalkan. Saat menjalankannya
git stash -u
termasuk file yang tidak terlacak (keren!) Tetapi tidak menghapus file yang tidak terlacak dan tidak tahu bagaimana menerapkan file tidak terlacak yang disimpan di atas sisa makanan (tidak keren!), Yang benar-benar membuat-u
opsi ini sangat tidak berguna.sumber
git stash -u
git stash show
. Jawaban ini membuat bola lampu menyala.Untuk menerapkan perbedaan kode di simpanan sebagai tambalan, gunakan perintah berikut:
sumber
git stash show --patch
tidak berisi file yang tidak terlacak.Ini telah terjadi pada saya berkali-kali, saya menyimpan file yang tidak terlacak
git stash -u
yang akhirnya ditambahkan ke repo dan saya tidak dapat menerapkan perubahan yang disimpan lagi.Saya tidak dapat menemukan cara untuk memaksa
git stash pop/apply
mengganti file, jadi pertama-tama saya menghapus salinan lokal dari file yang tidak terlacak yang disimpan ( hati-hati karena ini akan menghapus semua perubahan yang belum dilakukan ) dan kemudian menerapkan perubahan yang disimpan :Akhirnya, saya gunakan
git status
,git diff
dan alat lain untuk memeriksa dan menambahkan kembali bagian dari file yang dihapus jika ada sesuatu yang hilang.Jika Anda memiliki perubahan tidak terikat yang ingin Anda pertahankan, Anda dapat membuat komit sementara terlebih dahulu:
Gunakan alat apa pun yang cocok untuk Anda untuk menggabungkan perubahan yang telah dilakukan sebelumnya kembali ke file lokal, dan hapus komit palsu:
sumber
Operasi pop saya yang sama diblokir adalah karena sisa file yang diabaikan (lihat file .gitignore). Status Git menunjukkan bahwa saya terlacak dan tidak terlacak, tetapi aktivitas saya tidak membersihkan file yang diabaikan.
Detail: Saya telah menggunakan
git stash save -a
, memeriksa master untuk mengkompilasi dan melihat perilaku asli, kemudian mencoba mengembalikan semuanya untuk melanjutkan pengeditan. Ketika saya memeriksa cabang saya dan mencoba membuka, file yang saya abaikan masih ada di sana dari sebelum penyimpanan simpanan. Itu karena checkout master hanya memengaruhi file yang dikomit - itu tidak menghapus file yang diabaikan. Jadi pop gagal, pada dasarnya mengatakan itu tidak ingin memulihkan file yang diabaikan yang saya simpan di atas file yang masih ada. Sayangnya saya tidak dapat menemukan cara untuk memulai sesi penggabungan dengan mereka.Pada akhirnya, saya biasa
git clean -f -d -x
menghapus file yang diabaikan. Menariknya, dari ~ 30 saya, 4 file masih tersisa setelah dibersihkan (terkubur di subdirektori). Saya harus mencari tahu di kategori apa mereka, bahwa mereka harus dihapus secara manual.Kemudian pop saya berhasil.
sumber
Coba ini:
git checkout simpanan -.
sumber
Solusi lain:
sumber
Dengan Git 2.14.x / 2,15 (Q3 2017), qwertzguy 's solusi dari 2014 tidak akan diperlukan lagi.
Sebelum Q3 2017, Anda harus menghapus file tersebut, lalu coba simpan pop / apply lagi.
Dengan rilis Git berikutnya, Anda tidak perlu melakukan itu.
Lihat commit bbffd87 (11 Agustus 2017) oleh Nicolas Morey-Chaisemartin (
nmorey
) .(Digabung oleh Junio C Hamano -
gitster
- di commit 0ca2f32 , 23 Agustus 2017)sumber
Cara teraman untuk mengikuti penyimpanan
git simpanan -u
Ini akan menyembunyikan semua termasuk perubahan yang tidak bertahap
git stash drop
setelah Anda selesai mengerjakannya, untuk menghapus simpanan "aman" Anda.
sumber