Saya membuka repositori Git saya menggunakan gitExtensions pada Windows 7 untuk proyek Visual Studio. Tiba-tiba kosong. Repositori ada, tetapi semua komit saya telah hilang.
Saya menggunakan antarmuka grafis dan saya percaya ini adalah pertama kalinya saya membukanya sejak mereka memperbaruinya.
Saya tidak yakin apa yang harus saya lakukan untuk mendapatkan kembali komitmen saya.
Saat saya mengetik
git log
Saya menerima
fatal: revisi default buruk 'KEPALA'
Perbarui
Setelah melihat /programming/1545407/recovering-broken-git-repository saya mencoba
git fsck
dikembalikan:
kesalahan:
fatal KEPALA fatal: objek longgar 36b7d9e1ca496bcb864c0b9c8671fcec97fbda31 (disimpan dalam .git / objek ect / 36 / b7d9e1ca496bcb864c0b9c8671fcec97fbda31) rusak
Pengembalian berkomitmen:
kesalahan: tidak dapat menyelesaikan referensi KEPALA: Tidak ada file atau direktori yang
fatal: tidak dapat mengunci KEPALA ref
dan logging kembali cabang utama
$ git log master warning: mengabaikan ref / head / master yang rusak. peringatan: mengabaikan referensi / kepala / master yang rusak. fatal: argumen ambigu 'master': revisi yang tidak diketahui atau jalur yang tidak ada di pohon kerja. Gunakan '-' untuk memisahkan jalur dari revisi
Aku akan terus menempelkan hal-hal yang bisa relevan
$ git reflog master
warning: mengabaikan ref / head / master yang rusak.
peringatan: mengabaikan referensi / kepala / master yang rusak.
fatal: argumen ambigu 'master': revisi yang tidak diketahui atau jalur yang tidak ada di pohon kerja.
Gunakan '-' untuk memisahkan jalur dari revisi
Info yang lebih berguna: setiap kali saya menghapus file yang korup, yang lain mengambilnya. Saya mulai berpikir itu ada hubungannya dengan cabang master yang menunjuk ke hal yang salah atau sesuatu. karena saya menganggap kepala menunjuk ke master.
Suatu hari kemudian:
Jadi saya mendapatkan pasangan saya dalam hal ini, dia dapat memeriksa log dan dia mengatakan bahwa hash dalam log tidak cocok dengan objek di folder. Dia mencoba mengatur ulang cabang master ke log atau sesuatu seperti itu, saya agak bingung. Semoga bermanfaat
Jawaban:
Apa sebenarnya maksud Anda? Apakah pohon yang bekerja masih ada di sana? Apakah
.git/
ada Apakah ada file di dalamnya?Pesan yang Anda kirim menunjukkan bahwa file
.git/HEAD
tersebut tidak ada. Ini mendefinisikan keadaan yang diharapkan dari pohon yang bekerja (apa yang telah Anda periksa). Jika file itu hilang, git tidak tahu di mana Anda berada.Anda dapat mencoba membuat file sendiri, dengan konten ini:
ref: refs/heads/master
Jika Anda berada di cabang yang berbeda, ganti saja "master" dengan nama cabang. Jika Anda tidak berada di cabang, itu akan lebih rumit.
.git/logs/HEAD
mencatat status HEAD masa lalu, dengan baris di bagian bawah. Baris contoh ini menunjukkan checkout:25f2a6099fb5f9f2192a510c42f704f9fc4bcecb 65abb1a3dc102e2498860f01fb179cda4c51decb Rainer Blome <[email protected]> 1346938344 +0200 checkout: moving from master to MySuperBranch
SHA1 di depan merujuk pada commit. Anda harus dapat menemukannya di log cabang, misalnya
.git/logs/refs/heads/master
.Output git reflog yang Anda berikan sepertinya
refs/heads/master
hilang juga. Konten tunggalnya seharusnya SHA1 dari komit terbaru di atasnya (dan baris baru). Anda dapat menemukan SHA1 terbaru di akhir log cabang, misalnya.git/logs/refs/heads/master
.sumber
Jika .git / HEAD ada dan isinya
ref: refs/heads/master
kemudian memeriksa file ref / head / master, maka harus berisi sha1 dari commit terakhir.Jika file itu rusak dan penuh dengan NULL karakter Edit file itu dan letakkan sha1 dari commit terbaru dari
.git/logs/HEAD
atau yang sebelum komit terakhir.Lalu lakukan
git reset --hard 'sha1 of the commit that you selected'
sumber
Sepertinya repo Anda telah rusak. Hal termudah untuk dilakukan adalah memulihkan repo Anda dari cadangan atau mengkloning ulang repo dari sumber aslinya (dengan asumsi Anda tidak memiliki banyak pekerjaan dalam repo).
Jika resotring / kloning bukan pilihan saya akan merekomendasikan membaca Pro Git (buku online gratis atau versi kertas ). Seluruh buku ini sangat informatif, tetapi terutama lihat bab terakhir untuk mendapatkan pemahaman tentang bagaimana Git bekerja secara internal. Setelah Anda memahami bagaimana Git bekerja, lihat instruksi Linus untuk memulihkan benda yang rusak .
sumber
Setelah berselancar di web sebentar, saya akhirnya menemukan ini dan berhasil.
sumber
origin
(semoga tidak terlalu banyak pekerjaan dilakukan secara lokal), dan kemudian memaksamaster
cabang lokal untuk setuju dengan remote. Hati-hati,--reset
artinya buang semua perubahan lokal! Selain itu, jika tidak terlalu rusak, hanyagit reset origin/master
akan memulihkan keadaanmaster
cabang yang terakhir diketahui (check-in) .