Câu trả lời:
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 đề.
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.
$ mv .git/refs/remotes/origin/HEAD /tmp
$ git gc
git prune
git gc
hoạt động đối với tôi
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 ( develop
trong 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/HEAD
trong 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 prune
hiển thị lỗi này:
> git prune
warning: symbolic ref is dangling: refs/remotes/origin/HEAD
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/HEAD
và 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 gc
hoạt động tốt sau đó.
git remote set-head $REMOTE --auto
trong 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.
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
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.
git remote set-head origin --auto
cố đị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
error: Multiple remote HEAD branches. Please choose one explicitly
và 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.
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ó.
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.
master
một nhánh khác được gọidevelop
. Vài ngày trước khi tôi thay đổi nó trở lại từdevelop
thànhmaster
và tô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/HEAD
vẫn trỏ đếnrefs/remotes/origin/develop
mà không còn tồn tại. Trong tình huống này, việc xóa tệp đã hoạt động.