Git nghiêm trọng: Tham chiếu có định dạng không hợp lệ: 'refs / heads / master


101

Tôi đang sử dụng Dropboxđể đồng bộ hóa gitkho lưu trữ, nhưng bây giờ khi tôi thử và pushtôi gặp lỗi:

fatal: Reference has invalid format: 'refs/heads/master (MacBook-Pro's conflicted copy 2012-10-07)'

Vì vậy, có vẻ như Dropbox đã phát hiện ra xung đột và tạo ra một bản sao. Ok, không vấn đề gì, vì vậy tôi đã xóa tệp bị xung đột. Tuy nhiên, vẫn nhận được lỗi git ở trên.

$ git checkout master
    M   index.html
    Already on 'master'
$ git add .
$ git commit -a -m "Cleanup repo"
    [master ff6f817] Cleanup repo
    1 file changed, 5 insertions(+), 5 deletions(-)
$ git push
    fatal: Reference has invalid format: 'refs/heads/master (MacBook-Pro's conflicted copy 2012-10-07)'
    The remote end hung up unexpectedly`

Làm thế nào tôi có thể sửa lỗi này? Cảm ơn.

Câu trả lời:


178

tạo một bản sao lưu của repo của bạn nếu bạn không chắc chắn về điều này, vì những lệnh này không thể thay đổi được.

trước tiên, hãy vào thư mục repo của bạn.

cd myrepo

sau đó tìm kiếm đệ quy các tệp xung đột và xóa chúng

find . -type f -name "* conflicted copy*" -exec rm -f {} \;

cuối cùng, xóa mọi tham chiếu "xung đột" khỏi tệp tham chiếu đóng gói của git

awk '!/conflicted/' .git/packed-refs > temp && mv temp .git/packed-refs

1
Tôi đã gặp vấn đề tương tự và điều này đã khắc phục nó cho tôi. Cảm ơn bạn!
erik

Điều này đã sửa nó cho tôi quá. Cảm ơn bạn!
cecconeurale

1
cho người dùng macosfind . -type f -name "* conflicted copy*" -delete
Soyoes

42

Tệp bị xung đột có thể ở nhiều nơi, tôi sẽ xem xét:

.git/logs/refs/remotes/origin/
.git/logs/refs/heads/
.git/refs/remotes/origin/
.git/refs/heads/

Hoặc bạn có thể tìm mọi nơi trong .gitthư mục con:find . -name '*conflicted*'

Hoặc, nếu không, hãy liệt kê các nhánh đang hoạt động git branch -avà xóa ( git branch -d) bất kỳ thứ gì đáng ngờ.


Có các tệp xung đột ở khắp mọi nơi bên trong .git. Tôi đã xem qua và xóa tất cả, và nó đã được sửa. Cảm ơn.
Justin

2
@Justin Rất vui vì tôi có thể giúp. Nếu câu trả lời này hoặc bất kỳ câu trả lời nào khác giải quyết được vấn đề của bạn, vui lòng đánh dấu nó là được chấp nhận.
Marco Leogrande

2
Trên Mac OS X sử dụng: find . -name '*conflicted*'(Chỉnh sửa: định dạng)
xgMz

1
@xgMz Cảm ơn, tôi sẽ cập nhật câu trả lời của mình, vì giải pháp của bạn có giá trị chung.
Marco Leogrande

1
Với một cách đơn giản, findtôi đã nắm giữ một tệp xung đột và khắc phục sự cố theo cách thủ công với hai tệp mv. Làm điều này từ từ và suy luận từng bước là con đường an toàn nhất.
pid

8

Điều này cũng xảy ra với nhóm của chúng tôi khi đồng nghiệp của tôi đẩy các thay đổi của anh ấy và tắt PC trước khi Dropbox được cập nhật.

Tôi đã giải quyết nó quá đơn giản.

Vừa xóa bản sao bị xung đột. (Bản sao bị xung đột của XXXX yyyy-mm-dd)

Và kéo nó bình thường.

Lưu ý rằng đồng nghiệp của tôi đã có những thay đổi trước khi lộn xộn. Và anh ấy lại thúc đẩy những thay đổi của mình. Lần này không tắt máy. :)


1
hoạt động hoàn toàn hoàn hảo đối với tôi :) thx - đối với tôi dropbox đã tạo ra một số tên tệp chuỗi lạ không tương thích với "cập nhật"
cV2

1
Điều này đã làm việc cho tôi! Có một tệp có tên "bản sao bị xung đột" trong thư mục / refs / heads và xóa nó, sau đó kéo / đẩy và tất cả đều ổn. Cảm ơn!
DiscDev

7

Tôi đã có thể xóa tất cả các tệp xung đột khỏi thư mục .git của mình, nhưng tôi tiếp tục gặp lỗi về các tệp không còn tồn tại.

Cách khắc phục đối với tôi là mở .git/refs/packed_refsvà xóa các dòng có chứa văn bản "xung đột".


1

Đối với tôi, nó đã đưa ra lỗi: fatal: Reference has invalid format: 'refs/tags/r0.2:3'

Bạn có thể truy cập tệp /.git/packed_refs và xóa dòng chorefs/tags/r0.2:3

Sau đó, nó bắt đầu hoạt động. Nhưng tại sao nó lại xảy ra ngay từ đầu thì tôi không biết.


0

Hãy thử một git checkout masterlần đầu tiên để có được trên chi nhánh khỏe mạnh, có tên tuổi.


Cập nhật đầu ra trong bài gốc.
Justin

Hm, bạn có thể thử một bản đầy đủ git push origin master, và cũng có thể dán đầu ra của git branch -axin vui lòng?
poke

Lỗi tương tự ở đây ... thử git branch -akết quả là rất lỗi này!
trusktr

Vấn đề là trên kho lưu trữ từ xa, vì vậy kéo hoặc kiểm tra không giải quyết được. Các câu trả lời khác ở trên đề cập đến việc sửa chữa trực tiếp các tệp trên điều khiển từ xa và hoạt động hoàn hảo. LỜI KHUYÊN CỦA BẠN RẤT TỐT nhưng nó không phải là câu trả lời cho vấn đề.
pid

0

Tôi đã gặp lỗi tương tự

nghiêm trọng: Tham chiếu có định dạng không hợp lệ: 'refs / heads / somebranch (1)'

cho lệnh sau

git branch

Sau đó, tôi đã tìm kiếm tên sai (tên chi nhánh theo sau là (1)) bằng lệnh

find . -name 'somebranch (1)'

Và nó cho thấy kết quả sau

./.git/refs/heads/somebranch (1)

Đó là một số phiên bản trùng lặp của somebranch IMO. Vì vậy, tôi đã loại bỏ điều này bằng cách thực hiện lệnh tìm sau bằng cách xóa

find . -name 'somebranch (1)' -print -exec rm -rf {} \;

Sau đó, lệnh rẽ nhánh chạy thành công

git branch

0

Tôi gặp phải lỗi tương tự như

fatal: Reference has invalid format: 'refs/heads/user-search-api (Sithu's conflicted copy 2016-01-08)'

Chỉ cần xóa tệp .git/refs/heads/user-search-api (Sithu's conflicted copy 2016-01-08)trong kho lưu trữ Dropbox từ xa đã giải quyết được vấn đề.

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.