Rumah >Tutorial sistem >LINUX >Ajar anda untuk mendapatkan semula data dalam data simpanan git
Pengenalan | Disebabkan arahan git yang salah, dia memadamkan perubahan yang disimpan dalam simpanan. Selepas episod sedih ini kami cuba mencari jalan untuk memulihkan kerja yang telah dia lakukan dan kami melakukannya! Mula-mula kata amaran: apabila anda melaksanakan ciri yang besar, pecahkannya kepada bahagian kecil dan lakukannya dengan kerap. Bekerja dalam jangka masa yang lama tanpa komited bukanlah satu tabiat yang baik. Mari tunjukkan cara memulihkan perubahan yang dipadam secara tidak sengaja daripada simpanan. |
Dalam repositori yang saya gunakan sebagai contoh, hanya terdapat satu fail sumber "main.c", seperti yang ditunjukkan di bawah:
Ia hanya mempunyai satu komitmen, "Komit awal":
Versi pertama fail ini ialah:
Saya akan menulis beberapa kod dalam fail. Untuk contoh ini, saya tidak perlu membuat apa-apa perubahan besar, saya hanya perlukan sesuatu untuk disimpan, jadi kami hanya akan menambah satu baris. Output "git diff" adalah seperti berikut:
Sekarang, katakan saya ingin menarik beberapa perubahan baharu daripada repositori jauh, tanpa melakukan perubahan saya sendiri lagi. Jadi, saya memutuskan untuk menyimpannya dahulu, tunggu perubahan dalam gudang terpencil ditarik, dan kemudian kembalikan perubahan saya ke cawangan utama. Saya melaksanakan perintah berikut untuk memindahkan perubahan saya ke dalam simpanan:
git stash
Gunakan arahan "git stash list" untuk melihat simpanan dan anda boleh melihat perubahan saya di sini:
Kod saya sudah berada di tempat yang selamat dan cawangan induk kini bersih (semak dengan status command git). Sekarang saya hanya perlu menarik perubahan dari repositori jauh dan kembalikan perubahan saya kepada cawangan induk, iaitu apa yang saya sepatutnya lakukan.
Tetapi saya melaksanakan arahan dengan salah:
git stash drop
Ia mengalih keluar simpanan dan bukannya melaksanakan arahan berikut:
stash pop
Arahan ini akan menggunakan simpanan sebelum mengeluarkannya daripada tindanan. Jika saya melaksanakan perintah git stash list
sekali lagi, saya dapat melihat bahawa saya telah memadamkan perubahan tanpa mengembalikannya semula daripada timbunan ke cawangan induk. OMG! Apa yang perlu dilakukan seterusnya?
Berita baiknya ialah: git tidak memadamkan objek yang mengandungi perubahan saya, ia hanya mengalih keluar rujukan kepadanya. Untuk menunjukkan ini, saya menggunakan arahan git fsck, yang mengesahkan sambungan dan kesahihan objek dalam pangkalan data. Ini adalah output selepas saya melakukan git fsck pada repositori:
Saya membuat git-fsck menunjukkan semua objek yang tidak boleh dicapai terima kasih kepada parameter --unreachable. Seperti yang anda lihat, ia menunjukkan bahawa tiada objek yang tidak boleh diakses. Dan apabila saya memadamkan perubahan saya daripada simpanan dan melaksanakan perintah yang sama sekali lagi, saya mendapat output yang berbeza:
Kini terdapat tiga objek yang tidak boleh diakses. Jadi yang mana satu perubahan saya? Sebenarnya, saya tidak tahu. Saya perlu mencari setiap objek dengan melaksanakan arahan git show.
Itu sahaja! Nombor ID 95ccbd927ad4cd413ee2a28014c81454f4ede82c sepadan dengan perubahan saya. Sekarang saya telah menemui perubahan yang hilang, saya boleh memulihkannya. Satu cara ialah dengan mengambil ID ini dan memasukkannya ke dalam cawangan baharu, atau memasukkannya secara langsung. Sebaik sahaja anda mempunyai nombor ID objek perubahan anda, anda boleh memutuskan cara terbaik untuk mengembalikan semula perubahan kepada cawangan induk. Untuk contoh ini, saya menggunakan git stash untuk mengembalikan perubahan kepada cawangan induk saya.
git stash apply 95ccbd927ad4cd413ee2a28014c81454f4ede82c
Satu lagi perkara penting yang perlu diingat ialah git akan melaksanakan program pengumpulan sampahnya (gc) secara berkala Selepas ia dilaksanakan, anda tidak lagi dapat melihat objek yang tidak boleh diakses menggunakan git fsck.
Atas ialah kandungan terperinci Ajar anda untuk mendapatkan semula data dalam data simpanan git. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!