Jawaban:
Saya tidak mengerti konsekuensi dari ini, tetapi seperti yang disarankan di utas ini , ketika saya menemukan ini, saya baru saja melakukannya
$ mv .git/refs/remotes/origin/HEAD /tmp
(menyimpannya untuk berjaga-jaga) dan kemudian
$ git gc
bekerja tanpa mengeluh; Saya tidak mengalami masalah apa pun.
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 saya
Masalah 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:
ref: refs/remotes/origin/develop
Saya dengan hati-hati mengeditnya untuk menunjuk ke cabang default baru saya dan semuanya baik-baik saja:
ref: refs/remotes/origin/master
Petunjuk yang memberi tahu saya adalah bahwa berlari git prune
menunjukkan kesalahan ini:
> git prune
warning: symbolic ref is dangling: refs/remotes/origin/HEAD
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:
git remote set-head origin --auto
Ini secara otomatis mengatur file ke cabang baru, dan git gc
berfungsi dengan baik setelah itu.
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.
git remote set-head origin --auto
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 menggunakan git 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
$ git symbolic-ref refs/remotes/origin/HEAD refs/remotes/origin/master
$ git fetch --prune
$ git gc
Itu harus memperbaikinya.
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.
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.