Rumah  >  Artikel  >  Tutorial sistem  >  Ajar anda untuk mendapatkan semula data dalam data simpanan git

Ajar anda untuk mendapatkan semula data dalam data simpanan git

PHPz
PHPzke hadapan
2024-01-07 10:21:451191semak imbas
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.
Buat cawangan ujian

Dalam repositori yang saya gunakan sebagai contoh, hanya terdapat satu fail sumber "main.c", seperti yang ditunjukkan di bawah:

教你找回 git stash 数据中的数据
Ia hanya mempunyai satu komitmen, "Komit awal":
教你找回 git stash 数据中的数据

Versi pertama fail ini ialah:

教你找回 git stash 数据中的数据

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:
教你找回 git stash 数据中的数据

Penyalahgunaan git stash

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:

教你找回 git stash 数据中的数据

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?

Dapatkan semula data simpanan git

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:
教你找回 git stash 数据中的数据

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:
教你找回 git stash 数据中的数据

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.

教你找回 git stash 数据中的数据

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!

Kenyataan:
Artikel ini dikembalikan pada:linuxprobe.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam