Git cabang utama yang korup

9

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

MrJD
sumber
1
@heavyd silakan periksa pembaruan
MrJD

Jawaban:

3

Repositori ada, tetapi semua komit saya telah hilang.

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/HEADtersebut 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/HEADmencatat 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/masterhilang 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.

Rainer Blome
sumber
2

Jika .git / HEAD ada dan isinya ref: refs/heads/masterkemudian 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/HEADatau yang sebelum komit terakhir.

Lalu lakukan git reset --hard 'sha1 of the commit that you selected'

zaki
sumber
itu memang penuh dengan karakter NULL jadi saya memasukkan sha1 komit sebelumnya, tetapi kemudian melakukan git reset menghasilkan "error: update_ref gagal untuk ref 'HEAD': tidak dapat mengunci ref 'HEAD': tidak dapat menyelesaikan referensi HEAD: Argumen tidak valid "
fantabolous
1

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 .

astaga
sumber
Jadi, sayangnya saya tidak membuat cadangan file tersembunyi, .git disembunyikan. Saya benar-benar tidak punya cukup waktu untuk membaca seluruh buku, adakah yang menurut Anda bisa saya coba?
MrJD
"Baca buku tentang masalah internal" mungkin merupakan nasihat umum yang bagus tetapi tidak membantu mengatasi masalah dan pertanyaan spesifik yang ada.
Burhan Ali
0

Setelah berselancar di web sebentar, saya akhirnya menemukan ini dan berhasil.

git fetch origin
git reset --hard origin/master
Leye Odumuyiwa
sumber
Itu mendapat perubahan dari origin(semoga tidak terlalu banyak pekerjaan dilakukan secara lokal), dan kemudian memaksa mastercabang lokal untuk setuju dengan remote. Hati-hati, --resetartinya buang semua perubahan lokal! Selain itu, jika tidak terlalu rusak, hanya git reset origin/masterakan memulihkan keadaan mastercabang yang terakhir diketahui (check-in) .
vonbrand