Lỗi git khi kéo git (không thể cập nhật ref cục bộ)


115

Tôi chỉ có nhánh master và tôi gặp lỗi này mỗi khi tôi cố gắng "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)

và khi tôi thực hiện "git pull origin master", tôi nhận được:

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

tôi đã tìm kiếm nhưng không thể tìm thấy tại sao


2
Kho lưu trữ cục bộ ở đâu? Bạn đã tạo nó với tư cách là một người dùng khác với người bạn đang sử dụng để thực hiện kéo? Nó giống như một vấn đề về quyền đối với tệp.
tpg2114,

Vâng bạn ngay sau khi bạn biết chủ sở hữu của các tập tin dự án là một người dùng khác, bây giờ câu hỏi của tôi dường như để đánh lừa, nhưng bạn đã cho tôi câu trả lời, xin vui lòng làm cho nó một câu trả lời để lựa chọn nó như là tốt nhất;)
user115561

xin vui lòng @ tpg2114 thêm điều này như một câu trả lời để chọn nó
user115561

Câu trả lời:


262

Nhóm của tôi và tôi đã gặp phải lỗi này, không thể cập nhật tham chiếu cục bộ , khi thực hiện kéo trong SourceTree.

Chúng tôi đã sử dụng :

git gc --prune=now

Thao tác này sẽ xóa mọi đối tượng tham chiếu trùng lặp để khắc phục sự cố.

Dưới đây là một số liên kết nơi bạn có thể tìm hiểu thêm về tham chiếu git và cắt tỉa :

git mẹo trong tuần

tài liệu git-mận

tài liệu tham khảo git


1
Làm việc cho tôi quá, cùng một thông điệp, Sourcetree trên Windows 7
James Westgate

2
cũng chỉ bắt đầu gặp vấn đề này. Cảm ơn nhiều! hoạt động hoàn hảo!
ddrossi93

3
Có thể cần cả hai lệnh này: git gc --prune=now git remote prune originfrom stackoverflow.com/questions/2998832/…
bryan

1
Tôi đã thử git remote prune originvà nó không hiệu quả với tôi. Nhưng sau đó đã thử điều này git gc --prune=now, và nó đã hoạt động! Không chắc, nếu cả hai đều cần thiết theo thứ tự đó, hay chỉ thứ này.
Anurag

1
Tuy nhiên, một vấn đề khó hiểu khác gitdẫn đến một bài đăng StackOverflow hữu ích với một giải pháp ngắn gọn.
ijoseph

126

Tôi đã giải quyết như dưới đây:

git remote prune origin


6
Eureka! Nó thực sự đã hoạt động. Nó có liên quan đến các chi nhánh được đổi tên từ xa hoặc một cái gì đó. Tôi sẽ không cố gắng giải thích nó.
TheSoftwareJedi

8
Điều này đã làm điều đó cho tôi, git gc --prune=nowkhông làm bất cứ điều gì
Josh G

3
tương tự. điều này làm việc cho tôi. git gc --prune = bây giờ không hiệu quả với tôi.
Tony

16

với lệnh gitbach, sử dụng git update-refđể cập nhật tham chiếu của chi nhánh cục bộ của bạn:

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

sau đó kéo bằng cách sử dụng $ git pull

[locked branch name] là tên của nhánh mà lỗi đang xảy ra do không khớp các Id cam kết.


13

Cố gắng sử dụng lệnh này trong thư mục gốc của kho lưu trữ git của bạn:

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

Thư mục này ở đâu trên Windows?
Kolob Canyon

Tôi đã tìm thấy nó. Đó là bất kì thư mục bạn nhân bản để
Kolob Canyon

12

Tôi phát hiện ra cùng một thông báo Lỗi khi cố gắng kéo từ Repo Bitbuck vào bản sao lokal của mình. Cũng chỉ có một Branche Master và lệnh git pull origin masterdẫn đến Thông báo lỗi này

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

Giải pháp như sau

  1. git reflog tìm số lần cam kết cuối cùng
  2. git reset --hard <numnber> đặt lại về cam kết cuối cùng
  3. git pull origin master kéo lại mà không bị lỗi

10

rm .git/refs/remotes/origin/master

Nó hoạt động với tôi!


8

Đảm bảo người dùng đang thực thi chính git pulllà người dùng đã tạo kho lưu trữ. Quyền đối với tệp không chính xác.


Đối với tôi, tôi đã phải thay đổi chủ sở hữu của các tệp trong repo mà tôi đang cố gắng git kéo đến đúng người dùng bằng chown. Tôi nghĩ về cơ bản đây là những gì bạn đang nói mặc dù tôi không rõ ràng khi tôi đọc nó.
Dee

Tôi đồng ý với điều này, hãy kiểm tra xem chủ sở hữu và nhóm được đặt thành người dùng sẵn sàng kéo vào repo ".git" (xảy ra nếu bạn kéo một nhánh là "root") "sudo chown -R" đã thực hiện công việc trong trường hợp của tôi.
jo_

2

Điều này đã xảy ra với tôi trên OSX nơi tôi sử dụng hệ thống tệp không phân biệt chữ hoa chữ thường. Bằng cách nào đó nhà phát triển khác đẩy một chi nhánh có cùng tên nhưng trường hợp khác nhau: My-Branchvs my-branch.

Tôi đã My-Branchkiểm tra và gặp lỗi "không thể cập nhật tài liệu tham khảo cục bộ" khi tôi thực hiện kéo có thể do hệ thống tệp cho rằng My-Branch== my-branch.

Vì chúng tôi sử dụng Github nên tôi có thể giải quyết vấn đề bằng cách xóa một trong các nhánh thông qua GUI của Github.


Trong trường hợp của tôi, cả hai nhánh xung đột đều thuộc về người dùng khác nên tôi không thể xóa một nhánh. Thay vào đó, tôi đã xóa tệp ref chi nhánh dưới .git \ refs \ remotes, và điều đó đã khắc phục được nó (tạm thời - vấn đề sẽ trở lại mỗi khi tôi kéo cho đến khi người dùng khác xóa một trong các chi nhánh của mình).
Jana Mandic

Vấn đề của tôi cũng do chi nhánh địa phương và từ xa có cách viết hoa khác nhau. Xóa nhánh cục bộ, sử dụng lệnh tỉa ở trên và sau đó kiểm tra từ nguồn đã giải quyết được vấn đề này
descript

1

Lỗi này với (không thể cập nhật tài liệu tham khảo cục bộ) cũng có thể xảy ra nếu bạn đã thay đổi mật khẩu gần đây và có một số thứ lạ mắt tích hợp thông tin đăng nhập Windows và Linux của bạn.



1

Phát biểu của người dùng PC - Khởi động lại.

Thành thật mà nói, nó đã làm việc cho tôi. Tôi đã giải quyết hai vấn đề git kỳ lạ mà tôi nghĩ là lỗi theo cách này.


1

Đây có lẽ là một tình huống rất thích hợp, nhưng: Tôi chạy Windows trong một máy ảo Parallels trên MacBook Pro của mình, với các kho lưu trữ cục bộ của tôi được lưu trữ trên đĩa của máy ảo, được chia sẻ với macOS.

Nếu tôi có một tệp đang mở trong ứng dụng Mac từ kho lưu trên máy ảo Windows, đôi khi tôi gặp lỗi "không thể cập nhật tài liệu tham khảo cục bộ". Giải pháp khi điều này xảy ra là chỉ cần đóng tệp hoặc thoát khỏi ứng dụng Mac.


1

Chuyện gì đã xảy ra ở đây? Các tham chiếu cục bộ đến các nhánh từ xa của bạn đã bị thay đổi và do đó khi bạn chạy git pull, git không tìm thấy bất kỳ nhánh nào từ xa tương ứng và do đó nó không thành công.

git remote prune origin

thực sự làm sạch các tham chiếu cục bộ này và sau đó chạy git pulllại.

Đề xuất - Vui lòng chạy với --dry-runtùy chọn để an toàn


0

Tôi gặp sự cố tương tự trên máy chủ debian của mình vì đĩa đã đầy. Không thể tạo tệp tạm thời vì không còn dung lượng trên thiết bị. Sau khi làm sạch một số tệp, nó hoạt động tốt.


0

Công việc này cho tôi

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

Tôi nghi ngờ rằng điều này sẽ giúp - hoặc thậm chí có hiệu quả. Để thuyết phục tôi bằng cách khác, vui lòng thêm giải thích về cách thức hoạt động và lý do tại sao nó được cho là giúp giải quyết vấn đề. Làm nổi bật sự khác biệt với câu trả lời khác hiện có dường như tương tự sẽ là một phần thưởng. Đặc biệt là một ủng hộ của Babak.
Yunnosch

0

Tôi đã gặp lỗi tương tự, tôi đang cập nhật từ bên trong Eclipse và tôi gặp nhiều lỗi. Vì vậy, tôi đã thử cập nhật từ cửa sổ lệnh DOS và gặp sự cố tương tự.

Sau đó, tôi đã thử giải pháp "git gc --prune = now" Điều này đưa ra thông báo rằng các tệp đã bị khóa trong thư mục refs.

Eclipse hẳn đã bị khóa một thứ gì đó trong thư mục "refs".
Giải pháp mà tôi tìm thấy là chỉ cần đóng Eclipse. Sau đó, tôi cập nhật kho lưu trữ từ DOS bằng lệnh "git PULL" và mọi thứ hoạt động tốt.


0

Xóa tệp .git / logs / refs / remotes / origin / [Tên chi nhánh bị khóa]


1
Tôi nghi ngờ rằng điều này sẽ giúp - hoặc thậm chí có hiệu quả. Để thuyết phục tôi bằng cách khác, vui lòng thêm giải thích về cách thức hoạt động và lý do tại sao nó được cho là giúp giải quyết vấn đề. Làm nổi bật sự khác biệt với câu trả lời khác hiện có dường như tương tự sẽ là một phần thưởng. Đặc biệt là một ủng hộ của Babak.
Yunnosch
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.