lỗi git pull: error: ref từ xa nhưng dự kiến


227

Tin nhắn đầy đủ:

error: Ref refs/remotes/origin/user is at 3636498c2ea7735fdcedc9af5ab3c8689e6abe77 but expected a21359c6cc2097c85775cde6a40105f4bd7100ec
From github.com:{github project url}
 ! a21359c..6273ffc  user -> origin/user  (unable to update local ref)

3
Rõ ràng có người viết lại lịch sử của kho lưu trữ bằng cách git push --force. Cố gắng chạy git pull --force.
xaizek

1
Đưa ra lỗi tương tự với lực đẩy git - lực lượng
Sanjeev Kumar Dangi

5
Trả lời cho câu hỏi này đã giải quyết lỗi này - stackoverflow.com/questions/3046436/ từ
Sanjeev Kumar Dangi

Câu trả lời:


225

Nếu bạn đang chạy git trong một hệ thống tệp không phân biệt chữ hoa chữ thường (Windows hoặc OS X) thì điều này sẽ xảy ra nếu có hai nhánh có cùng tên nhưng viết hoa khác nhau, ví dụ user_model_changesUser_model_changesvì cả hai nhánh từ xa sẽ khớp với cùng một ref theo dõi .

Xóa sai nhánh từ xa (bạn không nên có các nhánh chỉ khác nhau theo từng trường hợp) và sau đó git remote prune originvà mọi thứ sẽ hoạt động


cảm ơn về câu trả lời. Đây không phải là vấn đề với lỗi này. Tôi đã tìm thấy giải pháp cho vấn đề này và đăng trong bình luận bên dưới câu hỏi.
Sanjeev Kumar Dangi

2
Cũng giúp cho Mac OS X (hệ thống tệp mặc định không phân biệt chữ hoa chữ thường).
Tammo Freese

12
vâng, sự cố không phân biệt chữ hoa chữ thường trên Windows đã gây ra sự cố. Tôi đã sửa nó bằng cách xóa thủ công ref trong .git\refs\remotes\originthư mục và sau đó git pullmột lần nữa.
Roy Ling

và đối với những người không biết thư mục .git sẽ ở đâu .. nó sẽ được tạo trong thư mục Project / workspace của bạn: D
kumar

1
Đây là một lỗi git. (Ít nhất là thông báo lỗi là sai). Tôi hy vọng ai đó có thể báo cáo lỗi này cho dự án git. Có vẻ khó khăn cho tôi để báo cáo lỗi cho dự án git. github.com/git/git
người đàn ông bằng đồng

190

Sửa chữa vĩnh viễn

git update-ref -d đã giải quyết ví dụ của tôi về lỗi này, vd

git update-ref -d refs/remotes/origin/user

Lưu ý rằng điều này không ảnh hưởng từ xa.

Trong trường hợp của tôi, một lần git fetchtải sau đó đã lấy lại nhánh đó và theo sau git tìm nạp / kéo không còn đưa ra lỗi "ref từ xa là tại nhưng dự kiến".

Nếu điều đó không làm việc, một sửa chữa tạm thời:

Cũng lưu ý rằng nếu bạn không quan tâm đến chi nhánh đang được đề cập (ví dụ: bạn chỉ muốn cập nhật chính, không phải nguồn gốc / người dùng), một git pullcách giải quyết là tìm nạp sau đó chỉ cần hợp nhất chi nhánh cụ thể mà bạn quan tâm, ví dụ:

git fetch # may give an error for a particular branch, but other branches will still be successfully fetched
git merge origin/master

Đây phải là giải pháp được chấp nhận vì nó giải quyết vấn đề mà không cần chạm vào điều khiển từ xa.
Cerno

52

Chỉ cần xóa các thư mục và tập tin dưới \.git\refs\remotes\origin. Hoạt động, khi bạn không có những thay đổi chưa được xử lý.


Điều này có thể không hoạt động nếu ref từ xa của bạn được 'đóng gói' và do đó không phải trong refs / điều khiển từ xa / ** @ Giải pháp của JDiMatteo vẫn hoạt động
Alexander Bird

2
Đã làm cho tôi. Cảm ơn rất nhiều!
Swapnil Patwa

Làm việc như người ở! Cảm ơn!
Anurag S Sharma

43

Tôi chạy cái này để giải quyết vấn đề:

git gc --prune=now

2
Điều này đã khắc phục vấn đề cho tôi.
Aamir Rizwan

2
đối với tôi cũng vậy ..-- :)
Aravind R Pillai

3
Cảm ơn, giải pháp này sửa chữa cho tôi. Bạn có thể vui lòng giải thích thêm một chút về giải pháp bạn cung cấp.
Aamol

1
về cơ bản nó chỉ là một công cụ thu gom rác git để nó xóa mọi thứ không đồng bộ nhưng nằm trên máy tính cục bộ cho mục đích lưu trữ
elad silver

42

Sử dụng hai lệnh dưới đây từng cái một.

git gc --prune=now

git remote prune origin

Điều này sẽ giải quyết vấn đề của bạn.


1
Điều này hiệu quả với tôi nhưng khi tôi thực hiện một thao tác khác, vấn đề này lại xuất hiện
Jojin

@Jojin Giống như bạn. Và cuối cùng tôi đã chọn cách Prakash Saravanan cung cấp
xi.lin

1
Điều này nên được đánh giá cao hơn đề xuất chỉnh sửa tệp git :)
Mike Wise

chỉ có giải pháp này làm việc cho tôi. Cảm ơn!
insaineyesay

12

Tôi đã phải loại bỏ chi nhánh của mình khỏi dòng lệnh của tôi tại:

.git\refs\remotes\{my remote}\{**my branch**}

và sau đó làm thủ công:

git pull [remote_name] [branch_name]

Tôi đã có thể kéo những thay đổi.

Lưu ý: Tôi đã sử dụng SourceTree và không thể thực hiện thao tác kéo.


Cuối cùng, tôi đã đổi tên các điều khiển từ xa của mình: Tôi đã có hai điều khiển từ xa "Bitbucket / staging" và "bitbucket / staging" trong lịch sử SourceTree của mình nhưng chỉ có "Bitbucket" xuất hiện trên dòng lệnh khi thực hiện: git remote -v. Vì vậy, tôi đã đổi tên Bitbucket thành bitbucket và cuộc xung đột cuối cùng đã biến mất, hy vọng điều này sẽ giúp người dùng SourceTree rất có thể.
Jogam5

Tôi cũng phải xóa chi nhánh từ .git\packed-refstrước khi nó được sửa cho tôi.
Michael

6

Thiết lập lại cứng cũng sẽ giải quyết vấn đề

git reset --hard origin/master

Bạn đã chọn một câu trả lời tốt nhất?
mruanova

5

Bước rõ ràng hơn

  1. trong thiết bị đầu cuối

    cd /.git/refs/remotes/origin
    
  2. làm ls, bạn sẽ thấy một số chi nhánhĐẦU

  3. Xóa chi nhánh bạn nghĩ có vấn đề

    rm branchname
    
  4. Nếu nó không hoạt động, xóa tất cả các chi nhánh / ĐẦU

    • bạn có thể kéo

Hy vọng nó hoạt động bây giờ.


điều này về cơ bản giống như git update-ref -d <branchname>?
jt000

2

Hãy thử điều này, nó làm việc cho tôi. Trong thiết bị đầu cuối của bạn : git remote prune origin.


2

Thật không may, các lệnh GIT như cắt tỉa và thiết lập lại hoặc đẩy không hoạt động đối với tôi. Prune làm việc một lần và sau đó vấn đề trở lại.

Giải pháp lâu dài phù hợp với tôi là chỉnh sửa tệp git bằng tay. Chỉ cần vào thư mục .git của dự án và sau đó mở tệp được đóng gói-refs trong trình soạn thảo văn bản như Notepad ++. Sau đó điều hướng đến hàng với nhánh không thành công và cập nhật hướng dẫn của nó đến nhánh dự kiến.

Nếu bạn có một tin nhắn như:

"lỗi: không thể khóa ref 'refs / điều khiển từ xa / nguồn gốc / tính năng / chi nhánh_xxx': ở mức 425ea23facf96f51f412441f41ad488fc098cf23 nhưng dự kiến ​​383de86fed394ff1a1aeefc4a522d886

sau đó trong tệp tìm hàng với 'refs / remote / origin / Feature / Branch_xxx'. Hướng dẫn sẽ có một dự kiến ​​(thứ 2) - 383de86fed394ff1a1aeefc4a522d886adcecd79. Bạn cần thay đổi nó thành cái thật (thứ 1) - 425ea23facf96f51f412441f41ad488fc098cf23.

Lặp lại cho các nhánh thất bại khác và bạn sẽ tốt để tiếp tục. Đôi khi sau khi tìm nạp lại, tôi phải lặp lại cho cùng một nhánh mà tôi đã 'sửa' trước đó. Khi tải lại hướng dẫn cập nhật GIT và cung cấp cho bạn bản mới nhất.

Dù sao, vấn đề không phải là một điểm dừng chương trình. Danh sách chi nhánh được cập nhật. Đây là một cảnh báo.


1

git for-Each-ref --format = 'xóa% (refname)' refs / gốc | git update-ref --stdin git reflog hết hạn --Exire = now --all git gc --prune = now


0

Trường hợp tương tự ở đây, nhưng không có gì về các bình luận được đăng trong trường hợp của tôi, tôi chỉ có một nhánh (chính) và chỉ sử dụng hệ thống tệp Unix, lỗi này xảy ra ngẫu nhiên khi tôi chạy git fetch --proceed --prune origin và nhánh đi trước hoặc 'nguồn gốc / chủ'. Không ai có thể cam kết, chỉ có 1 người dùng có thể thực hiện đẩy.

LƯU Ý: Tôi có một mô hình con trong kho lưu trữ acme và acme có các thay đổi mô hình con mới (cam kết mới), trước tiên tôi cần thực hiện cập nhật mô hình con với cập nhật mô hình con git.

[2014-07-29 13:58:37] Payload POST received from Bitbucket
[2014-07-29 13:58:37] Exec: cd /var/www/html/acme
---------------------
[2014-07-29 13:58:37] Updating Git code for all branches
[2014-07-29 13:58:37] Exec: /usr/bin/git checkout --force master
[2014-07-29 13:58:37] Your branch is ahead of 'origin/master' by 1 commit.
[2014-07-29 13:58:37]   (use "git push" to publish your local commits)
[2014-07-29 13:58:37] Command returned some errors:
[2014-07-29 13:58:37] Already on 'master'
---------------------
[2014-07-29 13:58:37] Exec: /usr/bin/git fetch --progress --prune origin
[2014-07-29 13:58:39] Command returned some errors:
[2014-07-29 13:58:39] error: Ref refs/remotes/origin/master is at 8213a9906828322a3428f921381bd87f42ec7e2f but expected c8f9c00551dcd0b9386cd9123607843179981c91
[2014-07-29 13:58:39] From bitbucket.org:acme/acme
[2014-07-29 13:58:39]  ! c8f9c00..8213a99  master     -> origin/master  (unable to update local ref)
---------------------
[2014-07-29 13:58:39] Unable to fetch Git data

Để giải quyết vấn đề này (trong trường hợp của tôi) chỉ cần chạy git đẩy đầu tiên nếu chi nhánh của bạn đi trước nguồn gốc.


3
Câu trả lời của bạn ở đây chỉ liên quan đến thực tế là kho lưu trữ cục bộ của bạn đi trước nguồn gốc sau một cam kết mới. Đây là trạng thái tự nhiên của một hoạt động cam kết git cục bộ và không liên quan đến câu hỏi ban đầu.
davient

0

Tôi biết điều này là cũ, nhưng tôi có sửa chữa riêng của tôi. Vì tôi đang sử dụng cây nguồn, lỗi này xảy ra do ai đó tạo một nhánh mới. Cây nguồn bị nhầm lẫn về điều này. Sau khi tôi nhấn nút "Làm mới" bên cạnh hộp tổ hợp "nhánh từ xa để kéo", có vẻ như sourcetree đã cập nhật danh sách chi nhánh và bây giờ tôi có thể kéo thành công.


0

Tôi gặp vấn đề tương tự do tôi đặt lại cho một cam kết cũ hơn mặc dù tôi đã bị đẩy đến chi nhánh từ xa.

Tôi đã giải quyết nó bằng cách xóa chi nhánh địa phương của tôi sau đó kiểm tra chi nhánh gốc git checkout origin/my_branchvà sau đó thực thigit checkout my_branch


-1

Sau khi tìm kiếm liên tục, đây là giải pháp hiệu quả với tôi, đòi hỏi phải bỏ / gỡ bỏ Dòng ngược

git branch --unset-upstream
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.