Ketika saya mencoba melakukan perubahan, saya mendapatkan kesalahan ini:
error: object file .git/objects/31/65329bb680e30595f242b7c4d8406ca63eeab0 is empty
fatal: loose object 3165329bb680e30595f242b7c4d8406ca63eeab0 (stored in .git/objects/31/65329bb680e30595f242b7c4d8406ca63eeab0) is corrupt
Adakah cara untuk mengatasi kesalahan ini?
EDIT
Saya sudah mencoba git fsck
:
error: object file .git/objects/03/dfd60a4809a3ba7023cbf098eb322d08630b71 is empty
fatal: loose object 03dfd60a4809a3ba7023cbf098eb322d08630b71 (stored in .git/objects/03/dfd60a4809a3ba7023cbf098eb322d08630b71) is corrupt
git add
operasi? Apakah hard disk Anda penuh?git fsck
menanganinya.Jawaban:
Saya punya masalah serupa. Laptop saya kehabisan baterai selama operasi git. Boo.
Saya tidak punya cadangan. (NB Ubuntu One bukan solusi cadangan untuk git; ini akan sangat membantu menimpa repositori waras Anda dengan yang rusak.)
Untuk para penyihir git, jika ini cara yang buruk untuk memperbaikinya, silakan tinggalkan komentar. Namun, itu berhasil bagi saya ... setidaknya untuk sementara.
Langkah 1: Buat cadangan .git (sebenarnya saya melakukan ini di antara setiap langkah yang mengubah sesuatu, tetapi dengan nama copy-to yang baru, misalnya .git-old-1, .git-old-2, dll.) :
Langkah 2: Jalankan
git fsck --full
Langkah 3: Hapus file kosong. Saya pikir apa-apaan itu; itu tetap kosong.
Langkah 3: Jalankan
git fsck
lagi. Lanjutkan menghapus file yang kosong. Anda juga dapatcd
masuk ke.git
direktori dan menjalankanfind . -type f -empty -delete -print
untuk menghapus semua file kosong. Akhirnya git mulai memberi tahu saya bahwa itu sebenarnya melakukan sesuatu dengan direktori objek:Langkah 4: Setelah menghapus semua file kosong, saya akhirnya
git fsck
benar - benar menjalankan:Langkah 5: Coba
git reflog
. Gagal karena KEPALA saya rusak.Langkah 6: Google. Temukan ini . Dapatkan dua baris reflog terakhir secara manual:
Langkah 7: Perhatikan bahwa dari Langkah 6 kami mengetahui bahwa KEPALA saat ini menunjuk ke komitmen terakhir. Jadi mari kita coba lihat komit induk:
Berhasil!
Langkah 8: Jadi sekarang kita perlu mengarahkan HEAD ke 9f0abf890b113a287e10d56b66dbab66adc1662d.
Yang tidak mengeluh.
Langkah 9: Lihat apa yang dikatakan fsck:
Langkah 10: Pointer sha1 yang tidak valid di cache-tree sepertinya berasal dari file index ( sumber yang sudah ketinggalan zaman ). Jadi saya membunuhnya dan mengatur ulang repo.
Langkah 11: Melihat fsck lagi ...
The gumpalan menggantung tidak kesalahan . Saya tidak peduli dengan master.u1conflict, dan sekarang sudah berfungsi saya tidak ingin menyentuhnya lagi!
Langkah 12: Mengejar suntingan lokal saya:
Jadi mudah-mudahan itu dapat bermanfaat bagi orang-orang di masa depan. Saya senang itu berhasil.
sumber
File objek git sudah rusak (seperti yang ditunjukkan dalam jawaban lain juga). Ini bisa terjadi selama mesin crash, dll.
Saya memiliki hal yang sama. Setelah membaca jawaban teratas lainnya di sini saya menemukan cara tercepat untuk memperbaiki repositori git yang rusak dengan perintah berikut (jalankan di direktori kerja git yang berisi
.git
folder):Ini pertama-tama akan menghapus semua file objek kosong yang menyebabkan kerusakan repositori secara keseluruhan, dan kemudian mengambil objek yang hilang (serta perubahan terbaru) dari repositori jarak jauh, dan kemudian melakukan pengecekan toko objek penuh . Yang, pada titik ini, harus berhasil tanpa kesalahan (mungkin masih ada beberapa peringatan!)
sumber
Kesalahan ini terjadi pada saya ketika saya mendorong komit saya dan komputer saya hang. Beginilah cara saya memperbaikinya.
Langkah-langkah untuk memperbaikinya
perlihatkan file objek kosong / rusak
Singkirkan
Saya mendapat
fatal: bad object HEAD
pesanSaya menghapus
index
untuk resetfatal: Tidak dapat menguraikan objek 'KEPALA'.
hanya untuk memeriksa apa yang terjadi
mencetak 2 baris terakhir
tail -n 2
cabang log untuk menunjukkan 2 terakhir sayacommit hash
Saya memilih yang terakhir
commit hash
menunjukkan semua file saya
deleted
karena saya menghapus.git/index
filelanjutkan ke reset
verifikasi perbaikan saya
Catatan: Langkah-langkah dimulai ketika saya mendarat di pertanyaan ini dan menggunakan jawaban sebagai referensi.
sumber
Saya memecahkan masalah ini dengan menghapus berbagai file kosong yang terdeteksi git fsck, dan kemudian menjalankan tarikan git sederhana.
Saya merasa mengecewakan bahwa sekarang bahkan sistem file menerapkan penjurnalan dan teknik "transaksional" lainnya untuk menjaga fs tetap waras, git dapat mencapai keadaan rusak (dan tidak dapat pulih dengan sendirinya) karena kegagalan daya atau ruang pada perangkat.
sumber
Saya baru saja mengalami masalah yang sama: setelah menarik repositori yang jauh, ketika saya melakukan status git saya mendapat: "error: file objek (...) kosong" "fatal: longgar objek (...) rusak"
Cara saya menyelesaikan ini adalah:
Saya tidak tahu persis apa yang terjadi, tetapi instruksi itu membuat semuanya bersih.
sumber
cd .git/ && find . -type f -empty -delete
Karena saya harus reboot VM saya secara teratur, jadi entah bagaimana masalah ini sangat sering terjadi pada saya. Setelah beberapa kali, saya menyadari bahwa saya tidak dapat mengulangi proses yang dijelaskan oleh @ Nathan-Vanhoudnos setiap kali ini terjadi, meskipun selalu berhasil. Kemudian saya menemukan solusi lebih cepat berikut.
Langkah 1
Pindahkan seluruh repo Anda ke folder lain.
Langkah 2
Kloning repo dari asal lagi.
Langkah 3
Hapus Semuanya di bawah repo baru kecuali folder .git .
Langkah 4
Pindahkan Semuanya dari temp_repo ke repo baru kecuali yang git folder.
Langkah 5
Hapus temp_repo , dan kita selesai.
Setelah beberapa kali, saya yakin Anda dapat melakukan prosedur ini dengan sangat cepat.
sumber
git clone source_to_current_repo.git clean_repo
, 2) buat cadangan folder .git lama, 3) salin ke folder .git yang bersih.Itu saja. Mungkin itu bukan cara terbaik, tapi saya pikir ini sangat praktis.
sumber
Dalam kasus saya, kesalahan ini terjadi karena saya mengetik pesan komit dan notebook saya dimatikan.
Saya melakukan langkah-langkah ini untuk memperbaiki kesalahan:
git checkout -b backup-branch
# Buat cabang cadangangit reset --hard HEAD~4
# Reset ke komit di mana semuanya bekerja dengan baik. Dalam kasus saya, saya harus mendukung 4 commit di kepala, yaitu sampai kepala saya berada di titik sebelum saya mengetik pesan commit. Sebelum melakukan langkah ini, salin hash dari commit yang akan Anda atur ulang, dalam kasus saya, saya menyalin hash dari 4 commit terakhir.git cherry-pick <commit-hash>
# Cherry memilih komit yang direset (dalam kasus saya adalah 4 komit, jadi saya melakukan langkah ini 4 kali) dari cabang lama ke cabang baru.git push origin backup-branch
# Dorong cabang baru untuk memastikan semuanya bekerja dengan baikgit branch -D your-branch
# Hapus cabang secara lokal ('cabang Anda' adalah cabang yang bermasalah)git push origin :your-branch
# Hapus cabang dari jarak jauhgit branch -m backup-branch your-branch
# Ganti nama cabang cadangan untuk memiliki nama cabang yang memiliki masalahgit push origin your-branch
# Dorong cabang barugit push origin :backup-branch
# Hapus cabang cadangan dari jarak jauhsumber
selesaikan masalah saya
sumber
git status
karena sebagian kosong.Ini adalah cara yang sangat sederhana dan cepat untuk mengatasi masalah ini JIKA Anda memiliki repo lokal dengan semua cabang dan komit yang Anda butuhkan, dan jika Anda boleh membuat repo baru (atau menghapus repo server dan membuat repo server yang baru dan membuat yang baru di tempatnya):
Ini menyimpan semua sejarah komit dan cabang yang Anda miliki di repo lokal Anda.
Jika Anda memiliki kolaborator di repo, maka saya pikir dalam banyak kasus semua kolaborator Anda harus lakukan adalah mengubah URL jauh dari repo lokal mereka juga, dan secara opsional mendorong setiap komitmen yang mereka miliki yang tidak dimiliki server.
Solusi ini bekerja untuk saya ketika saya mengalami masalah yang sama. Saya punya satu kolaborator. Setelah saya mendorong repo lokal saya ke repo jarak jauh yang baru, ia hanya mengubah repo lokalnya untuk menunjuk ke URL repo jarak jauh dan semuanya bekerja dengan baik.
sumber
Saya memiliki masalah yang sama setelah laptop saya mogok. Mungkin karena itu adalah repositori besar, saya mempunyai beberapa file objek korup, yang hanya muncul satu per satu saat memanggil
git fsck --full
, jadi saya menulis sebuah shell kecil satu-liner untuk secara otomatis menghapus salah satunya:$ sudo rm `git fsck --full 2>&1 | grep -oE -m 1 ".git/objects/[0-9a-f]{2}/[0-9a-f]*"`
2>&1
mengalihkan pesan kesalahan ke stdout untuk dapat menerimanya-o
hanya mengembalikan bagian dari garis yang benar-benar cocok-E
memungkinkan regex lanjutan-m 1
pastikan hanya pertandingan pertama yang dikembalikan[0-9a-f]{2}
cocok dengan salah satu karakter antara 0 dan 9 dan a dan f jika dua dari mereka muncul bersamaan[0-9a-f]*
cocok dengan sejumlah karakter antara 0 dan 9 dan a dan f yang terjadi bersamaanItu masih hanya menghapus satu file pada satu waktu, jadi Anda mungkin ingin menyebutnya dalam satu lingkaran seperti:
$ while true; do sudo rm `git fsck --full 2>&1 | grep -oE -m 1 ".git/objects/[0-9a-f]{2}/[0-9a-f]*"`; done
Masalahnya adalah, ia tidak menghasilkan apa pun yang berguna lagi sehingga Anda tidak tahu kapan itu selesai (seharusnya tidak melakukan apa pun yang berguna setelah beberapa waktu)
Untuk "memperbaiki" ini saya kemudian hanya menambahkan panggilan
git fsck --full
setelah setiap putaran seperti:$ while true; do sudo rm `git fsck --full 2>&1 | grep -oE -m 1 ".git/objects/[0-9a-f]{2}/[0-9a-f]*"`; git fsck --full; done
Sekarang kira-kira setengah lebih cepat, tetapi memang outputnya "keadaan".
Setelah ini saya bermain-main dengan beberapa saran di utas ini dan akhirnya sampai pada titik di mana saya bisa
git stash
dangit stash drop
banyak hal yang rusak.masalah pertama terpecahkan
Setelah itu saya masih memiliki masalah berikut:
unable to resolve reference 'refs/remotes/origin/$branch': reference broken
yang dapat diselesaikan oleh$ rm \repo.git\refs\remotes\origin\$branch
$ git fetch
Saya kemudian melakukan
$ git gc --prune=now
$ git remote prune origin
untuk ukuran yang baik dan
git reflog expire --stale-fix --all
untuk menyingkirkan
error: HEAD: invalid reflog entry $blubb
saat berjalangit fsck --full
.sumber
Mari kita mulai .. hanya jika Anda mengunggah sumber ke repo git jarak jauh
periksa git Anda
hapus file objek kosong (semua)
periksa git Anda lagi.
tarik sumber Anda dari remote git
sumber
Saya mengalami banyak masalah dengan mesin virtual.
Bagi saya karya-karya berikut:
Jika Anda ingin menyimpan sendiri beberapa unduhan - buka penjelajah file Anda dan hapus semua file di folder yang sudah dikomit dan tinggalkan di folder / vendor dan / node_modules (saya bekerja dengan komposer dan npm).
maka cukup buat repo baru
tambahkan kendali jarak jauh Anda
dan ambil cabang / semuanya
dan memeriksanya
maka Anda harus berada di titik sebelum kesalahan.
Semoga ini membantu.
Salam.
sumber
Saya mengalami masalah yang sama, dan saya menggunakan cara yang sangat sederhana untuk memperbaikinya. Saya menemukan bahwa file-file yang hilang ada di komputer teman satu tim saya.
Saya menyalin file-file itu satu per satu ke server git (total 9 file), dan itu memperbaiki masalahnya.
sumber
Rekan-rekan saya dan saya telah beberapa kali menyeberang dengan masalah yang sama dan untuk menyelesaikannya kami cukup melakukan langkah-langkah yang saya jelaskan di bawah ini. Ini bukan solusi paling elegan yang dapat ditemukan tetapi bekerja tanpa kehilangan data.
old_project
untuk contoh ini).git clone
.old_project
(kecuali.git
direktori) ke direktori proyek yang baru dibuat.Saya harap ini membantu ...
sumber
Berikut adalah cara untuk menyelesaikan masalah jika repo publik Anda di github.com berfungsi, tetapi repo lokal Anda rusak. Ketahuilah bahwa Anda akan kehilangan semua komitmen yang Anda lakukan di repo lokal.
Baiklah, jadi saya punya satu repo lokal yang memberi saya ini
object empty error
, dan repo yang sama di github.com, tetapi tanpa kesalahan ini. Jadi yang saya lakukan hanyalah mengkloning repo yang berfungsi dari github, dan kemudian menyalin semuanya dari repo yang korup (kecuali folder .git), dan menempelkannya repo kloning yang berfungsi.Ini mungkin bukan solusi praktis (karena Anda menghapus komit lokal), namun, Anda mempertahankan kode dan kontrol versi yang diperbaiki.
Ingatlah untuk membuat cadangan sebelum menerapkan pendekatan ini.
sumber
Dalam kasus saya, tidak penting bagi saya untuk menyimpan riwayat commit lokal. Jadi jika itu juga berlaku untuk Anda, Anda dapat melakukan ini sebagai alternatif cepat untuk solusi di atas:
Anda pada dasarnya hanya mengganti
.git/
direktori yang rusak dengan yang bersih.Mari kita asumsikan direktori berikut untuk proyek Anda dengan git yang rusak:
projects/corrupt_git/
cp projects/corrupt_git projects/backup
- (opsional) buat cadangangit clone [repo URL] projects/clean_git
- sehingga Anda dapatkanprojects/clean_git
rm -rf corrupt_git/.git/
- hapus folder .git yang rusakmv clean_git/.git/ corrupt_git/
- Pindahkan git bersih kecorrupt_git/.git
git status
diprojects/corrupt_git
- untuk memastikan itu berhasilsumber
Salin semuanya (dalam folder yang berisi .git) ke cadangan, lalu hapus semuanya dan mulai ulang. Pastikan Anda memiliki remote git:
Kemudian
Kemudian gabungkan semua file baru secara manual, dan coba nyalakan komputer Anda.
sumber
Punya masalah yang sama setelah memeriksa master dari cabang yang bersih. Setelah beberapa saat saya mengenali banyak file yang dimodifikasi di master. Saya tidak tahu mengapa mereka ada di sana, setelah beralih dari cabang yang bersih. Ngomong-ngomong, karena file yang dimodifikasi tidak masuk akal bagi saya, saya hanya menyimpannya dan kesalahan sudah hilang.
git:(master) git stash
sumber
jika Anda memiliki cadangan LAMA dan sedang terburu-buru:
membuat CADANGAN BARU dari jalur proyek Anda saat ini, git-broken,.
.git
ke tempat sampah (tidak pernah dihapus).git
dari cadangan TUAgit pull
(akan membuat konflik gabungan)./src
(tidak pernah dihapus)git gui
, dorong dan ... bertepuk tangan!sumber
Solusi dua belas langkah yang dibahas di atas membantu saya keluar dari kemacetan juga. Terima kasih. Langkah-langkah kuncinya adalah memasukkan:
dan hapus semua benda kosong
Kemudian dapatkan dua garis belasan:
Dengan nilai yang dikembalikan
Pada titik ini saya tidak memiliki kesalahan lagi, jadi saya membuat cadangan file terbaru saya. Kemudian lakukan git pull diikuti oleh git push. Menyalin cadangan saya ke file repositori git saya dan melakukan push git lainnya. Itu membuat saya lancar.
sumber
Saya memperbaiki kesalahan git saya: file objek kosong oleh:
Semoga ini bisa membantu.
sumber
Ini juga terjadi pada saya hampir secara teratur. Belum membuat protokol saat ini terjadi persis, tetapi saya memiliki kecurigaan bahwa itu terjadi setiap kali mesin virtual saya ada "secara tak terduga". Jika saya menutup jendela VM (saya menggunakan Ubuntu 18.04) dan mulai lagi, semuanya selalu (?) Berfungsi. Tetapi jika jendela VM masih terbuka ketika laptop saya dimatikan (sistem host Windows), maka saya lebih sering mengalami masalah ini.
Adapun semua jawaban yang diberikan di sini:
terima kasih - mereka sangat berguna; Saya biasanya menyimpan salinan lokal kode saya, mengembalikan repo dari jarak jauh, dan memindahkan salinan cadangan ke folder lokal.
karena masalah yang mendasarinya bukan masalah git, tapi masalah VM dan / atau Linux, saya bertanya-tanya apakah seharusnya tidak ada cara untuk menyembuhkan alasannya daripada gejalanya? Bukankah kesalahan semacam ini menunjukkan bahwa beberapa perubahan sistem file tidak "diterapkan" pada waktu yang wajar, tetapi hanya di-cache? (lihat misalnya /unix/464184/are-file-edits-in-linux-directly-saved-into-disk ) - bagi saya sepertinya mesin virtual Linux tidak fsynch barang-barang mereka cukup sering. Apakah ini masalah Oracle VirtualBox (yang jika tidak berfungsi dengan sangat baik) atau sistem file tamu, atau beberapa pengaturan, yang kita semua abaikan, berada di luar keahlian saya. Tetapi saya akan senang jika seseorang dapat menjelaskan hal ini.
sumber
Sebenarnya saya punya masalah yang sama. Dapatkan salinan kode Anda sebelum mencoba ini.
saya baru saja melakukannya
git reset HEAD~
komit terakhir saya dibatalkan lalu saya komit lagi, masalah terpecahkan!
sumber
Peringatan: Dengan lebih banyak pengalaman, saya menyadari bahwa ini adalah opsi nuklir dan biasanya tidak boleh dilakukan dan tidak mengajarkan apa pun. Namun, pada kesempatan yang jarang terjadi untuk proyek pribadi, saya masih menganggapnya berguna, jadi saya meninggalkannya.
Jika Anda tidak peduli tentang menjaga komitmen historis Anda, jalankan saja
Kemudian jawab ya untuk pertanyaan apa pun tentang menghapus file yang dilindungi tulis. Masalah terpecahkan dalam waktu kurang dari satu menit.
sumber