Kesalahan git pada git pull (tidak dapat memperbarui referensi lokal)

116

Saya hanya memiliki master cabang dan saya mendapatkan kesalahan ini setiap kali saya mencoba "git pull":

error: Couldn't set refs/remotes/origin/master
From /var/lib/git/xxx/project
 ! a0f80ea..49177a3  master     -> origin/master  (unable to update local ref)

dan ketika saya melakukan "git pull origin master" saya mendapatkan:

error: Couldn't set ORIG_HEAD
fatal: Cannot update the ref 'ORIG_HEAD'.

Saya telah mencari tetapi tidak dapat menemukan alasannya

pengguna115561
sumber
2
Dimana repositori lokalnya? Apakah Anda membuatnya sebagai pengguna yang berbeda dari yang Anda gunakan untuk menjalankan tarikan? Sepertinya masalah izin file.
tpg2114
Ya Anda benar setelah Anda mengatakan bahwa pemilik file proyek adalah pengguna lain, sekarang pertanyaan saya tampak sangat bodoh, tetapi Anda memberi saya jawabannya, jadikanlah sebagai jawaban untuk memilihnya sebagai yang terbaik;)
user115561
tolong @ tpg2114 tambahkan ini sebagai jawaban untuk memilihnya
user115561

Jawaban:

263

Tim saya dan saya mengalami kesalahan ini, tidak dapat memperbarui referensi lokal , saat melakukan penarikan SourceTree.

Kami menggunakan:

git gc --prune=now

Tindakan ini akan menghapus objek referensi duplikat yang seharusnya memperbaiki masalah tersebut.

Berikut beberapa tautan tempat Anda dapat mempelajari lebih lanjut tentang referensi dan pemangkasan git :

git tip minggu ini

dokumentasi git-prune

referensi git

Cakalang
sumber
1
Bekerja untuk saya juga, pesan yang sama, Sourcetree di Windows 7
James Westgate
2
baru saja mulai mengalami masalah ini juga. Terima kasih banyak! bekerja dengan sempurna!
ddrossi93
3
Mungkin membutuhkan kedua perintah ini: git gc --prune=now git remote prune origindari stackoverflow.com/questions/2998832/…
bryan
1
Saya mencoba git remote prune origindan itu tidak berhasil untuk saya. Tapi setelah itu coba ini git gc --prune=now, dan berhasil! Tidak yakin, apakah keduanya dibutuhkan dalam urutan itu, atau hanya yang ini.
Anurag
1
Namun masalah samar lainnya gityang mengarah ke pos StackOverflow yang bermanfaat dengan solusi singkat.
ijoseph
129

Saya menyelesaikannya seperti di bawah ini:

git remote prune origin

Edward Yang
sumber
6
Eureka! Itu memang berhasil. Ini ada hubungannya dengan cabang berganti nama jauh atau sesuatu. Saya tidak akan mencoba menjelaskannya.
TheSoftwareJedi
8
Ini berhasil untuk saya, git gc --prune=nowtidak melakukan apa
Josh G
3
sama. ini berhasil untuk saya. git gc --prune = sekarang tidak berhasil untuk saya.
Tony
16

dengan perintah baris gitbach, gunakan git update-refuntuk memperbarui referensi cabang lokal Anda:

$ git update-ref -d refs/remotes/origin/[locked branch name]

lalu tarik menggunakan $ git pull

[locked branch name] adalah nama cabang yang kesalahannya terjadi karena ketidakcocokan ID komit.

T.Moez
sumber
13

Coba gunakan perintah ini di folder root repositori git Anda:

rm .git/logs/refs/remotes/origin/master 
Babak
sumber
Di mana folder ini di Windows?
Kolob Canyon
Aku menemukannya. Itu direktori apa pun yang Anda kloning
Kolob Canyon
12

Saya menemukan pesan Kesalahan yang sama mencoba menarik dari Bitbuck Repo ke salinan lokal saya. Hanya ada satu Branche Master dan perintah git pull origin mastermengarah ke Pesan Kesalahan ini

From https://bitbucket.org/xxx
 * branch            master     -> FETCH_HEAD
error: Couldn't set ORIG_HEAD
fatal: Cannot update the ref 'ORIG_HEAD'.

Solusinya sebagai berikut

  1. git reflog temukan jumlah komit terakhir
  2. git reset --hard <numnber> reset ke komit terakhir
  3. git pull origin master tarik lagi tanpa kesalahan
di luar batas
sumber
10

rm .git/refs/remotes/origin/master

Ini bekerja untuk saya!

Xin
sumber
8

Pastikan pengguna yang menjalankan git pulladalah pengguna yang sama yang membuat repositori. Izin file salah.

tpg2114
sumber
Bagi saya, saya harus mengubah pemilik file di repo yang saya coba git tarik ke pengguna yang benar dengan chown. Saya pikir ini pada dasarnya adalah apa yang Anda katakan meskipun tidak jelas bagi saya ketika saya membaca ini.
Dee
Saya setuju dengan ini, periksa bahwa pemilik dan grup disetel ke pengguna yang bersedia menarik repo ".git" (terjadi jika Anda menarik cabang menjadi "root") dan "sudo chown -R" melakukan pekerjaan dalam kasus saya.
jo_
2

Gandakan repositori lagi, dan salin folder .git di proyek Anda yang rusak.

Gabriel Santos Carvalho
sumber
2

Ini terjadi pada saya di OSX di mana saya menggunakan sistem file case insensitive. Entah bagaimana pengembang lain mendorong cabang dengan nama yang sama tetapi kasus berbeda: My-Branchvs.my-branch .

Saya sudah My-Branchmemeriksa dan mendapatkan kesalahan "tidak dapat memperbarui referensi lokal" ketika saya melakukan penarikan mungkin karena sistem file berpikir My-Branch== my-branch.

Karena kami menggunakan Github, saya dapat menyelesaikan masalah dengan menghapus salah satu cabang melalui GUI Github.

gabrielf
sumber
Dalam kasus saya, kedua cabang yang bentrok adalah milik pengguna lain sehingga saya tidak dapat menghapusnya. Sebagai gantinya, saya menghapus file ref cabang di bawah .git \ refs \ remote, dan memperbaikinya (sementara - masalah akan muncul kembali setiap kali saya menarik hingga pengguna lain menghapus salah satu cabangnya).
Jana Mandic
Masalah saya juga karena cabang lokal dan remote memiliki kapitalisasi yang berbeda. Menghapus cabang lokal, menggunakan perintah prune di atas, dan kemudian memeriksa dari asal menyelesaikannya
deskripsi
1

Kesalahan ini dengan (tidak dapat memperbarui referensi lokal) juga dapat terjadi jika Anda telah mengubah kata sandi baru-baru ini dan ada beberapa hal mewah yang mengintegrasikan login Windows dan Linux Anda.

Hazok
sumber
1

Berbicara dari pengguna PC - Boot ulang.

Sejujurnya, itu berhasil untuk saya. Saya telah memecahkan dua masalah git aneh yang saya pikir adalah korupsi dengan cara ini.

GONeale
sumber
1

Ini mungkin situasi yang sangat khusus, tetapi: Saya menjalankan Windows di VM Paralel di MacBook Pro saya, dengan repo lokal saya yang disimpan di disk VM, yang dibagikan dengan macOS.

Jika saya membuka file di aplikasi Mac dari repo yang terletak di VM Windows, terkadang saya mendapatkan pesan error "tidak dapat memperbarui referensi lokal". Solusi ketika ini terjadi adalah dengan menutup file atau keluar dari aplikasi Mac.

daGUY
sumber
1

Apa yang terjadi disini? Referensi lokal ke cabang jarak jauh Anda telah diubah dan karenanya ketika Anda menjalankan git pull, git tidak menemukan cabang jarak jauh yang sesuai dan karenanya gagal.

git remote prune origin

benar-benar bersihkan referensi lokal ini lalu jalankan git pulllagi.

Saran - Jalankan dengan --dry-runopsi untuk keamanan

di sana
sumber
0

Saya memiliki masalah yang sama di server debian saya karena disknya penuh. Tidak ada file temporer yang dapat dibuat karena tidak ada ruang tersisa di perangkat. Setelah membersihkan beberapa file, itu berhasil dengan baik.

fibonacci
sumber
0

Ini bekerja untuk saya

rm .git/logs/refs/remotes/origin/master 
Saurabh Kumar
sumber
Saya ragu ini membantu - atau bahkan berhasil sama sekali. Untuk meyakinkan saya jika tidak, tolong tambahkan penjelasan tentang bagaimana ini seharusnya bekerja dan mengapa itu seharusnya membantu masalah. Menyoroti perbedaan pada jawaban lain yang tampaknya serupa akan menjadi bonus. Terutama yang disukai oleh Babak.
Yunnosch
0

Saya mengalami kesalahan yang sama, saya memperbarui dari dalam Eclipse dan saya mendapat banyak kesalahan. Jadi saya mencoba memperbarui dari jendela perintah DOS, dan mendapatkan masalah yang sama.

Kemudian saya mencoba solusi "git gc --prune = now" Ini memberi pesan bahwa file dikunci di direktori refs.

Eclipse pasti terkunci pada sesuatu di direktori "refs".
Solusi yang saya temukan adalah dengan menutup Eclipse. Kemudian saya memperbarui repositori dari DOS dengan perintah "git PULL", dan semuanya bekerja dengan baik.

Peter Lenahan
sumber
0

Hapus file .git / logs / refs / remote / origin / [Locked Branch Name]

Nitin Agarwal
sumber
1
Saya ragu ini membantu - atau bahkan berhasil sama sekali. Untuk meyakinkan saya jika tidak, tolong tambahkan penjelasan tentang bagaimana ini seharusnya bekerja dan mengapa itu seharusnya membantu masalah. Menyoroti perbedaan pada jawaban lain yang tampaknya serupa akan menjadi bonus. Terutama yang disukai oleh Babak.
Yunnosch