Làm thế nào để xử lý lỗi git gc death: bad object refs / remotes / origin / HEAD?


131

Hôm nay tôi đánh ngẫu nhiên nó trong khi cố chạy Git rác thu thập :

$ git gc
fatal: bad object refs/remotes/origin/HEAD
error: failed to run repack

Làm thế nào để đối phó với điều này?

Câu trả lời:


163

Tôi không hiểu phân nhánh của điều này, nhưng như được đề xuất trong chủ đề này , khi tôi gặp phải điều này, tôi đã làm

$ mv .git/refs/remotes/origin/HEAD /tmp

(giữ nó xung quanh để đề phòng) và sau đó

$ git gc

đã làm việc mà không phàn nàn; Tôi đã không gặp bất kỳ vấn đề.


6
Nó hoạt động với tôi và tôi nghĩ rằng tôi gặp sự cố này vì tôi đã thay đổi nhánh mặc định từ mastermột nhánh khác được gọi develop. Vài ngày trước khi tôi thay đổi nó trở lại từ developthành mastertôi đã xóa nhánh mặc định cũdevelop , nhưng trong thư mục làm việc của tôi, tệp .git/refs/remotes/origin/HEADvẫn trỏ đến refs/remotes/origin/developmà không còn tồn tại. Trong tình huống này, việc xóa tệp đã hoạt động.
Stavarengo

4
git pruneđã làm việc cho tôi, một cách để xóa dữ liệu đã tích lũy trong Git nhưng không được tham chiếu bởi bất kỳ thứ gì hữu ích.
Sven Malvik

Thực hiện chúng giải quyết vấn đề của tôi:$ mv .git/refs/remotes/origin/HEAD /tmp $ git gc git prune
David Rauca

2
Tôi nghi ngờ cách tốt nhất sẽ là câu trả lời của @ WilQu ( stackoverflow.com/a/49944297/660339 ). bất cứ ai có thể xác nhận điều này?
Ivan Perez

xóa các tệp đó ra khỏi thư mục .git, hơn là git gchoạt động đối với tôi
Vino

68

Vấn đề mà tôi gặp phải (cũng chính là vấn đề mà @Stavarengo đã đề cập trong nhận xét này ở trên) là nhánh từ xa mặc định ( developtrong trường hợp của tôi) đã bị xóa, nhưng vẫn được tham chiếu trong.git/refs/remotes/origin/HEAD .

Mở .git/refs/remotes/origin/HEADtrong trình soạn thảo của tôi cho thấy điều này:

ref: refs/remotes/origin/develop

Tôi đã cẩn thận chỉnh sửa nó để trỏ đến nhánh mặc định mới của mình và tất cả đều ổn:

ref: refs/remotes/origin/master

Manh mối cho tôi biết là việc chạy git prunehiển thị lỗi này:

> git prune
warning: symbolic ref is dangling: refs/remotes/origin/HEAD

1
Đó cũng là bản sửa lỗi của tôi
Dan Carlstedt

1
Đây là giải pháp chính xác của tôi. Nhóm của chúng tôi gần đây đã thay đổi từ việc sử dụng một nhánh mặc định được phát triển thành nhánh chính
jmancherje

40

Sau khi xem câu trả lời của Trenton, tôi nhìn vào câu trả lời của mình .git/refs/remotes/origin/HEADvà thấy rằng nó cũng đang trỏ đến một nhánh cũ hiện đã bị xóa.

Nhưng thay vì tự mình chỉnh sửa tệp, tôi đã thử giải pháp của Ryan:

git remote set-head origin --auto

Nó tự động đặt tệp thành nhánh mới và git gchoạt động tốt sau đó.


Đúng, điều này phù hợp với tôi - vì tôi đã ở trong cùng một kịch bản. git remote set-head $REMOTE --autotrong trường hợp của tôi, $ REMOTE là bí danh từ xa, không phải là "nguồn gốc" mặc định, vì tôi đã thiết lập nhiều điều khiển từ xa.
Devy

29

Tôi nghĩ rằng giải pháp là như sau vì điều này có vẻ hiệu quả, nhưng nó thực sự không giải quyết được vấn đề.

git remote set-head origin --auto

1
Có vẻ như lệnh này đã giúp tôi thoát khỏi rắc rối tương tự. Tuy nhiên, sau lệnh này, tôi cũng đã sử dụng git prune(như được khuyến nghị trong đầu ra lệnh đầu tiên), vì vậy tôi không thể nói chính xác điều gì đã giúp tôi - thứ nhất, thứ hai hoặc cả hai.
Borys Pylhun

1
git remote set-head origin --autocố định refs / điều khiển từ xa / gốc / file đầu tôi mà không có tôi phải sử dụnggit prune
Danio

Tôi đã gặp lỗi này: error: Multiple remote HEAD branches. Please choose one explicitlyvà phải sử dụng git remote set-head origin mybranch(trong khi chi nhánh 'mybranch' đang thanh toán) để lỗi biến mất.
derekmx271

3
Từ chối vì không phải là câu trả lời đầy đủ và có thể gây hiểu lầm.
Christian Vielma

9

Có vẻ như các tham chiếu tượng trưng của bạn có thể bị hỏng ... Hãy thử thay thế nó bằng nhánh mặc định của bạn như sau: Ví dụ: nhánh mặc định của tôi là nhánh chính

$ git symbolic-ref refs/remotes/origin/HEAD refs/remotes/origin/master
$ git fetch --prune
$ git gc

Điều đó sẽ sửa chữa nó.


0

Nếu bạn đang sử dụng các worktrees git, hãy đảm bảo rằng bạn đang làm

git worktree prune

trước khi chạy

git gc

Tôi đã có một worktree bị hỏng và điều này dường như thực hiện thủ thuật sau khi xóa worktree bị hỏng. git prunetự nó dường như không hoạt động.


0

Nguyên nhân của điều này đối với tôi là làm việc trong một thư mục nén trong Windows. Khi thư mục không được nén, nó đã làm hỏng các tệp gói, tạo ra các vấn đề kỳ lạ khác, chẳng hạn như không thể cắt các nhánh không tồn tại.

Cách khắc phục duy nhất là xóa sạch thư mục làm việc và sao chép lại (các) điều khiển từ xa. May mắn thay, tôi vẫn có thể đẩy và kéo các bản cập nhật để đảm bảo không có gì bị mất. Tất cả bây giờ là tốt.

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.