Ini sepertinya kesalahan populer karena berbagai penyebab.
Saya punya repo git sederhana bernama "kiflea.git", saya mengkloningnya seperti ini:
git clone git://kipdola.be/kiflea.git
Kemudian git memberi tahu saya: warning: remote HEAD refers to nonexistent ref, unable to checkout.
Dan ya, tidak ada file berversi di peta, kecuali untuk direktori .git. Bagaimanapun, satu-satunya hal yang perlu saya lakukan adalah:
cd kiflea
git checkout master
Dan berhasil, semua file ada di sana. Tapi saya pikir kloning repo secara otomatis memeriksa master, jadi apa yang sebenarnya terjadi, dan bagaimana cara memperbaikinya?
Saya perhatikan bahwa, setelah saya melakukan git checkout master
sedikit, ini akan ditambahkan ke file konfigurasi .git lokal saya:
[branch "master"]
remote = origin
merge = refs/heads/master
Mungkin menarik untuk mengetahui bahwa repositori git ini dulunya adalah repositori svn di masa lalu.
NB: saat menjelajahi repositori telanjang menggunakan gitweb, jelas ada master
cabang di sana: http://kipdola.be/gitweb/?p=kiflea.git;a=summary
git ls-remote origin
diperlihatkan padamu?checkout master
bit:25f600739343a7ce32d6311a1e6140870774810b refs/heads/master
HEAD
. Apakah Anda memiliki akses langsung ke sana? Jika demikian, lihat di sinigit clone -b master <url> <dir>
Jawaban:
The
warning: remote HEAD refers to nonexistent ref, unable to checkout.
berarti bahwa remote (telanjang) repositori berisi referensi cabang di file bernamaHEAD
yang tidak dapat ditemukan pada cabang yang diterbitkan dalam repositori yang sama.Perhatikan bahwa peringatan tersebut hanya berarti bahwa git tidak melakukan pembayaran. Repositori kloning sebaliknya baik-baik saja. Lakukan saja
git branch -a
untuk melihat kemungkinan cabang dangit checkout the-branch-you-want
untuk mengatasi masalah tersebut.Ini biasanya terjadi karena konten default untuk file itu (
.git/HEAD
atau biasaHEAD
untuk repositori telanjang) adalahref: refs/heads/master
yang mengatakan bahwa jika seseorang pergi keclone
repositori ini, mereka harus secara default mengkloning cabangrefs/heads/master
. Secara default Git akan membuat cabang lokal tanparefs/heads/
awalan (yaitu,master
secara default). Cobagit help symbolic-ref
untuk informasi lebih lanjut.Masalah dengan situasi ini adalah Git tidak menyediakan metode untuk memodifikasi referensi simbolik jarak jauh jadi Anda bisa menggunakan sesuatu yang telah diterapkan oleh penyedia hosting Git (misalnya Pengaturan - Cabang default di GitHub jika Anda memiliki hak admin) atau Anda harus menggunakan nama cabang
master
sebagai cabang default (karena itulah nilai default untuk ref simbolis itu).Jika Anda memiliki akses shell ke repo git jarak jauh Anda, Anda dapat dengan mudah di
cd path/to/bare/git/repo; git symbolic-ref HEAD refs/heads/XYZ
manaXYZ
nama cabang yang ingin Anda gunakan secara default.Salah satu cara untuk mengatasi masalah ini adalah dengan membuat repo telanjang jarak jauh baru tanpa komit dan kemudian melakukannya
git push name-of-the-remote my-special-branch-name
yang akan menghasilkan repositori kosong yang berisi satu cabangmy-special-branch-name
tetapiHEAD
ref simbolis masih berisi nilai default yang menunjuk kemaster
. Akibatnya, Anda akan mendapatkan peringatan tersebut.sumber
checkout
. Repositori kloning sebaliknya baik-baik saja. Lakukangit branch -a
untuk melihat kemungkinan cabang dangit checkout the-branch-you-want
untuk "memperbaiki" masalahnya.git clone -b master
(atau apapun nama cabang yang ada).cd path/to/bare/git/repo; git symbolic-ref HEAD refs/heads/XYZ
manaXYZ
nama cabang default yang ingin Anda gunakan jikagit clone
dilakukan tanpa-b
flag. Jika Anda memiliki masalah lain, harap ajukan pertanyaan baru alih-alih menambahkan pertanyaan sebagai komentar.Saya mengalami masalah yang sama karena saya tidak lagi menggunakan
master
cabang dan hilang di repositori lokal dan jarak jauh saya.Repositori jarak jauh masih
HEAD
diatur kemaster
, saya telah mengubahnya ke salah satu cabang jarak jauh yang sebenarnya saya gunakan dan semuanya berfungsi dengan baik.Jika Anda dapat mengakses repositori jarak jauh Anda:
remote_repo.git
;HEAD
fileref: refs/heads/master
keref: refs/heads/your_branch
sumber
broken_branch
denganrefs/heads/master
.cd path/to/bare/git/repo; git symbolic-ref HEAD refs/heads/XYZ
manaXYZ
nama cabang default yang ingin Anda gunakan jikagit clone
dilakukan tanpa-b
bendera, seperti yang saya katakan di komentar lain.Ya, ini terkait dengan klon git Anda yang mencoba melakukan pembayaran di cabang yang berbeda dari master. Lakukan saja ini
Ini akan membantu Anda mengkloning cabang yang tepat melalui nama cabangnya.
sumber
Meskipun kesalahan ini ditampilkan - proyek saya masih terhubung ke repositori yang sesuai - saya menjalankan
git branch
perintah dan melihat cabang yang sesuai - lalu saya menjalankangit checkout *branchname
dan BOOM - semuanya baik-baik saja.sumber
Pasti ada yang salah dengan repositori jarak jauh Anda. Anda mungkin bisa memperbaikinya dengan membuat tiruan baru dari repositori. Juga mendorong komit baru ke cabang master mungkin juga berfungsi.
sumber
Saya kira itu adalah yang terdepan
*
dalam log komit yang entah bagaimana menipu server jarak jauh.Saya dapat menelusuri antarmuka web repo menggunakan beberapa tautan menu, tetapi yang lain gagal dengan a
404 - Unknown commit object
atau serupa, terutama dari halaman ringkasan.Lihat apakah Anda bisa mengubah pesan komit terakhir dan kemudian memaksa mendorong pembaruan untuk melihat apakah itu memperbaikinya. Mungkin ada bug di server demon. Jika berhasil memperbaikinya, sebaiknya laporkan di daftar git [email protected] (hanya pesan teks biasa)
sumber
Saya memiliki masalah yang sama saat membuat repo telanjang.
Saya menyelesaikannya hanya dengan mengkloning repo, membuat cabang master lokal dan kemudian mendorong master ke repo jarak jauh.
1) kloning repo
2) buat cabang master secara lokal.
3) melakukan sesuatu di cabang lokal
4) Dorong master lokal pada remote
sumber
Jika sebenarnya tidak ada cabang master yang tersedia, periksa yang berikut ini; Jika ada file bernama 'dikemas-refs' di dalam folder '.git', buka dan Anda dapat menemukan semua referensi yang terdaftar.
Sesuatu seperti di bawah ini;
Kemudian gunakan;
Atau
untuk membayar versi yang diperlukan. Terima kasih.
sumber
Saya sepertinya memperbaikinya dengan:
Ini menciptakan master default, dan kemudian saya bisa melakukan checkout pada cabang saya yang lain
sumber
Dalam kasus saya, repo itu kosong.
sumber
Untuk Gitlab, meskipun itu menunjukkan Anda berada di cabang default (misalnya
master
) Anda mungkin tidak benar-benar di dalamnya, mengaturnya lagi memperbaikinya, seperti:asd
master
asd
master
asd
cabangSelesai, sekarang cabang default Anda adalah
master
sumber