Saya secara acak menekan ini hari ini ketika mencoba menjalankan pengumpulan sampah Git :
$ git gc
fatal: bad object refs/remotes/origin/HEAD
error: failed to run repack
Bagaimana saya menangani ini?
git
git-remote
git-fetch
git-gc
Ryan
sumber
sumber
master
lain yang disebutdevelop
. Beberapa hari sebelum saya mengubahnya kembali daridevelop
menjadimaster
dan saya menghapus cabang default lamadevelop
, tetapi di direktori kerja saya, file.git/refs/remotes/origin/HEAD
itu masih mengarah kerefs/remotes/origin/develop
yang sudah tidak ada lagi. Dalam situasi ini, menghapus file berhasil.git prune
berhasil untuk saya, cara untuk menghapus data yang telah terkumpul di Git tetapi tidak direferensikan oleh sesuatu yang berguna.$ mv .git/refs/remotes/origin/HEAD /tmp
$ git gc
git prune
git gc
bekerja untuk sayaMasalah yang saya hadapi (yang merupakan masalah yang sama dengan yang disebutkan @Stavarengo dalam komentar di atas) adalah bahwa cabang jarak jauh default (
develop
dalam kasus saya) telah dihapus, tetapi masih direferensikan di.git/refs/remotes/origin/HEAD
.Pembukaan
.git/refs/remotes/origin/HEAD
di editor saya menunjukkan ini:Saya dengan hati-hati mengeditnya untuk menunjuk ke cabang default baru saya dan semuanya baik-baik saja:
Petunjuk yang memberi tahu saya adalah bahwa berlari
git prune
menunjukkan kesalahan ini:sumber
Setelah melihat jawaban Trenton, saya melihat jawaban saya
.git/refs/remotes/origin/HEAD
dan melihat bahwa itu juga menunjuk ke cabang lama yang sekarang sudah dihapus.Tetapi alih-alih mengedit file sendiri, saya mencoba solusi Ryan:
Ini secara otomatis mengatur file ke cabang baru, dan
git gc
berfungsi dengan baik setelah itu.sumber
git remote set-head $REMOTE --auto
dalam kasus saya, $ REMOTE adalah alias jarak jauh, bukan "asal" default, karena saya memiliki beberapa pengaturan jarak jauh.Saya pikir solusinya adalah sebagai berikut karena ini sepertinya berhasil, tetapi ternyata tidak benar-benar menyelesaikan masalah.
sumber
git prune
(seperti yang direkomendasikan dalam keluaran perintah pertama), jadi saya tidak dapat mengetahui dengan tepat apa yang membantu saya - pertama, kedua, atau keduanya.git remote set-head origin --auto
memperbaiki file refs / remote / origin / HEAD saya tanpa harus saya gunakangit prune
error: Multiple remote HEAD branches. Please choose one explicitly
dan harus menggunakangit remote set-head origin mybranch
(sementara cabang 'cabang saya' sedang melakukan pembayaran) untuk menghilangkan kesalahan.Sepertinya simbolik-ref Anda mungkin rusak ... Coba ganti dengan cabang default Anda seperti ini: Misalnya, cabang default saya adalah master
Itu harus memperbaikinya.
sumber
Jika Anda menggunakan git worktrees, pastikan Anda melakukan file
sebelum berlari
Saya memiliki pohon kerja yang rusak dan ini sepertinya berhasil setelah menghapus pohon kerja yang rusak.
git prune
dengan sendirinya sepertinya tidak berhasil.sumber
Penyebabnya bagi saya adalah bekerja di folder terkompresi di Windows. Ketika folder tidak terkompresi, itu merusak file paket, masalah aneh lainnya, seperti tidak dapat memangkas cabang yang tidak ada.
Satu-satunya perbaikan adalah menghapus direktori kerja dan mengkloning remote repo lagi. Untungnya, saya masih bisa melakukan push dan pull update untuk memastikan tidak ada yang hilang. Semuanya baik-baik saja sekarang.
sumber