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


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


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


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.


13

Coba gunakan perintah ini di folder root repositori git Anda:

rm .git/logs/refs/remotes/origin/master 

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

10

rm .git/refs/remotes/origin/master

Ini bekerja untuk saya!


8

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


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

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.


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.


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.


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.


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


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.


0

Ini bekerja untuk saya

rm .git/logs/refs/remotes/origin/master 

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.


0

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


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.