Câu hỏi Kho Git bị hỏng sau khi máy tính chết


Máy tính của tôi đã chết và bây giờ một trong những kho chứa git của tôi bị hỏng. Khi tôi cố gắng để kiểm tra tổng thể nó nói với tôi:

warning: ignoring broken ref refs/heads/master.
error: Your local changes to the following files would be overwritten by checkout:
        com.vainolo.jdraw2d.releng.p2/pom.xml
Please, commit your changes or stash them before you can switch branches.
Aborting

Khi tôi thực thi git stash Tôi có:

fatal: bad revision 'HEAD'
fatal: bad revision 'HEAD'
fatal: Needed a single revision
You do not have the initial commit yet

Vậy tôi có thể làm gì?

Cập nhật Đầu ra của git reflog:

fatal: bad default revision 'HEAD'

Không phải là rất hứa hẹn ... git fsck:

error: Invalid HEAD
Checking object directories: 100% (256/256), done.
error: unable to unpack 59551f96b4e87a1c14293c19eb548ce6fa1f196f header
error: inflateEnd: stream consistency error (no message)
fatal: loose object 59551f96b4e87a1c14293c19eb548ce6fa1f196f (stored in .git/objects/59/551f96b4e87a1c14293c19eb548ce6fa1f196f) is corrupt

76
2018-03-09 23:20


gốc


Bạn có thể kiểm tra xem .git/refs/heads/master tồn tại và nếu nội dung của nó là băm cam kết hợp lệ của kho lưu trữ của bạn (bạn có thể kiểm tra, ví dụ: sử dụng git show <hash>)? - poke
Tôi biết điều này là hiển nhiên, nhưng vẫn hỏi - bạn có repo từ xa nào của cùng repo git không? - Tuxdude
@poke nội dung của .git/refs/heads/master/ là một loạt ^@ - vainolo
@Tuxdude yep, nhưng không được cập nhật những thay đổi mới nhất của tôi - vainolo
Cái gì git reflog nói cho bạn nghe? Bạn đã thử chạy chưa git fsck? - kynan


Các câu trả lời:


Tôi đã xoay sở để phục hồi thông qua:

rm .git/refs/remotes/origin/HEAD
git fetch --all

156
2018-03-10 04:47



Trong trường hợp của tôi nó xảy ra vì tôi đã xóa một số nhánh địa phương và từ xa (bằng cách nào đó tệp .git / refs / remotes / origin / HEAD vẫn ở trạng thái không ổn định). Thay đổi nội dung của tệp được đề cập ở trên để trỏ đến một nhánh cục bộ hiện có (ví dụ: ref: refs / remotes / origin / master) đã giải quyết được vấn đề này. Tuy nhiên, cách tiếp cận trên có thể tốt hơn vì HEAD có thể trỏ đến cam kết không nằm trong nhánh hiện tại. - crissdev
Trong trường hợp vấn đề xảy ra với một mô đun con git cụ thể, lệnh đầu tiên sẽ thay đổi một chút thành rm <root repository path>/.git/modules/<path to the submodule>/refs/remotes/origin/HEAD - Gobe


Bắt đầu bằng cách làm theo các bước được đề xuất trong Khôi phục kho lưu trữ git bị hỏng:

  • Kiểm tra xem .git/refs vẫn chứa bất cứ điều gì hữu ích
  • kiểm tra git reflog và thất bại rằng nội dung của .git/logs/refs/heads/master hoặc bất kỳ chi nhánh nào bạn đã sử dụng cuối cùng
  • chạy git fsck, có khả năng với --unreachable hoặc là --lost-found

Điều này hy vọng sẽ cho phép bạn tìm ra master ref nên được như vậy bạn có thể khôi phục lại nó (tức là mèo đúng SHA1 vào .git/refs/heads/master).

Trong trường hợp bất kỳ đối tượng nào có trong cam kết đó thực sự bị hỏng, bạn không thể khôi phục HEAD cam kết không may. Giả sử cây và / hoặc chỉ số làm việc của bạn vẫn còn nguyên vẹn, bạn có thể thử git reset --soft (hoặc thất bại git reset) cho cam kết trước đó và sau đó thực hiện lại cam kết. Tránh bất kỳ hoạt động nào thay đổi cây làm việc của bạn s.a. git checkout -f hoặc là git reset --hard.


18
2018-03-09 23:39



Tôi đã nhìn .git/logs/refs/heads/mybranch. Nó cho thấy một số loại lịch sử của cam kết với chi nhánh này. Đào qua đó tôi đã chọn SHA và cố gắng hiển thị chúng với git show. (Mỗi lần commit có hai SHA, tôi chọn cái thứ hai, ngay trước tên tác giả.) Cái cuối cùng bị hỏng nhưng cái trước đó có thể là git shown và tôi đã có thể đẩy nó với git push origin abcdef:mybranch. - Ed Avis


Tôi đã có một vấn đề tương tự sau một màn hình xanh chết trên windows 8.1

Tôi đã có một tập tin ở vị trí này ...

C:\www\<project>\.git\refs\remotes\origin\<problem-branch>

Và nó trống rỗng trong khi các tệp chi nhánh khác trong thư mục này có các chuỗi dài bên trong chúng.

NB Tôi không có bất kỳ thay đổi / cam kết nào

  • Tôi đã sao lưu <problem-branch> tập tin
  • Đã xóa tệp
  • git fetch --all để lấy lại chi nhánh

Sau đó, hoàn thành tự động tab bắt đầu hoạt động trở lại


9
2017-11-04 10:18





Nếu không có nhiều tệp được sửa đổi, tôi nghĩ cách tiện lợi để giải quyết vấn đề này là:

  1. sao lưu các tập tin bạn đã sửa đổi trong repo
  2. loại bỏ repo hiện tại của bạn
  3. tái sao chép từ máy chủ
  4. dán các tập tin từ bước 1 đến repo, và git commit -a 

5
2018-03-10 10:55



vâng, không ai có thể nghĩ đến việc nhân bản lại. đề xuất tuyệt vời - Selman Genç


tôi quản lý để giải quyết điều này với xóa tập tin tổng thể trong thư mục git \ refs \ heads


2
2018-03-18 15:02





Tôi biết đó là một phản ứng quá muộn, nhưng tôi đã nhận được lỗi này vì tôi không có origin/head. Bạn có thể tìm thấy điều này bằng cách chạy git branch -r. Nếu bạn không thấy origin/head trỏ đến một nguồn gốc từ xa, bạn có thể thiết lập điều này bằng cách chạy git remote set-head origin {{your branch name}}.

Bây giờ chạy git branch -r một lần nữa, và bạn sẽ thấy một cái gì đó như thế này: origin/HEAD -> origin/develop

Tôi hy vọng điều này sẽ giúp bất kỳ ai khác đang gặp phải vấn đề này.


1
2018-06-13 18:39





Sau khi bị đóng băng và sụp đổ tính toán, nhánh git của tôi đã bị hỏng với thông báo: git fatal: your current branch appears to be broken. Tôi không thể làm gì cả.

Sau khi làm git fsck đã đề cập rằng chi nhánh đã có error: Invalid HEAD. refs/heads/<branch> có một invalid sha1 pointer.

Khi làm theo các tùy chọn ở đây, tôi đã mở .git/refs/heads/<branch> trong trình soạn thảo notepad ++ và mỗi ký tự sha1 là NUL.

May thay tôi chỉ cần thiết lập lại nhánh ở trạng thái từ xa, và đó là một repo bitbucket. Tôi nắm lấy sha1 từ đầu của repo từ xa và sao chép vào .git/refs/heads/<branch> lưu nó, sau đó đã làm một git reset --hard HEADvà mọi thứ trở lại bình thường.


1
2017-10-04 14:16