Tôi đã có một vấn đề tương tự. Máy tính xách tay của tôi hết pin trong một hoạt động git. Boo.
Tôi đã không có bất kỳ bản sao lưu. (NB Ubuntu One không phải là một giải pháp sao lưu cho git; nó sẽ ghi đè một cách hữu ích kho lưu trữ lành mạnh của bạn với kho lưu trữ bị hỏng của bạn.)
Đối với các pháp sư git, nếu đây là một cách xấu để sửa nó, xin vui lòng để lại nhận xét. Nó đã làm, tuy nhiên, làm việc cho tôi ... ít nhất là tạm thời.
Bước 1: Tạo bản sao lưu của .git (thực tế tôi thực hiện việc này ở giữa mỗi bước thay đổi một cái gì đó, nhưng với một tên sao chép mới, ví dụ: .git-old-1, .git-old-2, v.v.) :
cp -a .git .git-old
Bước 2: Chạy git fsck --full
nathanvan@nathanvan-N61Jq:~/workspace/mcmc-chapter$ git fsck --full
error: object file .git/objects/8b/61d0135d3195966b443f6c73fb68466264c68e is empty
fatal: loose object 8b61d0135d3195966b443f6c73fb68466264c68e (stored in .git/objects/8b/61d0135d3195966b443f6c73fb68466264c68e) is corrupt
Bước 3: Xóa tệp trống. Tôi đã tìm, cái quái gì; dù sao nó cũng trống.
nathanvan@nathanvan-N61Jq:~/workspace/mcmc-chapter$ rm .git/objects/8b/61d0135d3195966b443f6c73fb68466264c68e
rm: remove write-protected regular empty file `.git/objects/8b/61d0135d3195966b443f6c73fb68466264c68e'? y
Bước 3: Chạy git fsck
lại. Tiếp tục xóa các tập tin trống. Bạn cũng có thể cd
vào .git
thư mục và chạy find . -type f -empty -delete -print
để xóa tất cả các tệp trống. Cuối cùng, git bắt đầu nói với tôi rằng nó thực sự đang làm gì đó với các thư mục đối tượng:
nathanvan@nathanvan-N61Jq:~/workspace/mcmc-chapter$ git fsck --full
Checking object directories: 100% (256/256), done.
error: object file .git/objects/e0/cbccee33aea970f4887194047141f79a363636 is empty
fatal: loose object e0cbccee33aea970f4887194047141f79a363636 (stored in .git/objects/e0/cbccee33aea970f4887194047141f79a363636) is corrupt
Bước 4: Sau khi xóa tất cả các tệp trống, cuối cùng tôi đã git fsck
thực sự chạy:
nathanvan@nathanvan-N61Jq:~/workspace/mcmc-chapter$ git fsck --full
Checking object directories: 100% (256/256), done.
error: HEAD: invalid sha1 pointer af9fc0c5939eee40f6be2ed66381d74ec2be895f
error: refs/heads/master does not point to a valid object!
error: refs/heads/master.u1conflict does not point to a valid object!
error: 0e31469d372551bb2f51a186fa32795e39f94d5c: invalid sha1 pointer in cache-tree
dangling blob 03511c9868b5dbac4ef1343956776ac508c7c2a2
missing blob 8b61d0135d3195966b443f6c73fb68466264c68e
missing blob e89896b1282fbae6cf046bf21b62dd275aaa32f4
dangling blob dd09f7f1f033632b7ef90876d6802f5b5fede79a
missing blob caab8e3d18f2b8c8947f79af7885cdeeeae192fd
missing blob e4cf65ddf80338d50ecd4abcf1caf1de3127c229
Bước 5: Thử git reflog
. Thất bại vì ĐẦU của tôi bị hỏng.
nathanvan@nathanvan-N61Jq:~/workspace/mcmc-chapter$ git reflog
fatal: bad object HEAD
Bước 6: Google. Tìm này . Nhận thủ công hai dòng cuối cùng của reflog:
nathanvan@nathanvan-N61Jq:~/workspace/mcmc-chapter$ tail -n 2 .git/logs/refs/heads/master
f2d4c4868ec7719317a8fce9dc18c4f2e00ede04 9f0abf890b113a287e10d56b66dbab66adc1662d Nathan VanHoudnos <nathanvan@gmail.com> 1347306977 -0400 commit: up to p. 24, including correcting spelling of my name
9f0abf890b113a287e10d56b66dbab66adc1662d af9fc0c5939eee40f6be2ed66381d74ec2be895f Nathan VanHoudnos <nathanvan@gmail.com> 1347358589 -0400 commit: fixed up to page 28
Bước 7: Lưu ý rằng từ Bước 6, chúng tôi đã biết rằng CHÍNH hiện đang chỉ đến cam kết cuối cùng. Vì vậy, hãy cố gắng chỉ nhìn vào cam kết của phụ huynh:
nathanvan@nathanvan-N61Jq:~/workspace/mcmc-chapter$ git show 9f0abf890b113a287e10d56b66dbab66adc1662d
commit 9f0abf890b113a287e10d56b66dbab66adc1662d
Author: Nathan VanHoudnos <nathanvan@XXXXXX>
Date: Mon Sep 10 15:56:17 2012 -0400
up to p. 24, including correcting spelling of my name
diff --git a/tex/MCMC-in-IRT.tex b/tex/MCMC-in-IRT.tex
index 86e67a1..b860686 100644
--- a/tex/MCMC-in-IRT.tex
+++ b/tex/MCMC-in-IRT.tex
Nó đã làm việc!
Bước 8: Vì vậy, bây giờ chúng ta cần trỏ TRÊN 9f0abf890b113a287e10d56b66dbab66adc1662d.
nathanvan@nathanvan-N61Jq:~/workspace/mcmc-chapter$ git update-ref HEAD 9f0abf890b113a287e10d56b66dbab66adc1662d
Mà không phàn nàn.
Bước 9: Xem những gì fsck nói:
nathanvan@nathanvan-N61Jq:~/workspace/mcmc-chapter$ git fsck --full
Checking object directories: 100% (256/256), done.
error: refs/heads/master.u1conflict does not point to a valid object!
error: 0e31469d372551bb2f51a186fa32795e39f94d5c: invalid sha1 pointer in cache-tree
dangling blob 03511c9868b5dbac4ef1343956776ac508c7c2a2
missing blob 8b61d0135d3195966b443f6c73fb68466264c68e
missing blob e89896b1282fbae6cf046bf21b62dd275aaa32f4
dangling blob dd09f7f1f033632b7ef90876d6802f5b5fede79a
missing blob caab8e3d18f2b8c8947f79af7885cdeeeae192fd
missing blob e4cf65ddf80338d50ecd4abcf1caf1de3127c229
Bước 10: Con trỏ sha1 không hợp lệ trong cây bộ đệm có vẻ như là từ một tệp chỉ mục (hiện đã lỗi thời) ( nguồn ). Vì vậy, tôi đã giết nó và thiết lập lại repo.
nathanvan@nathanvan-N61Jq:~/workspace/mcmc-chapter$ rm .git/index
nathanvan@nathanvan-N61Jq:~/workspace/mcmc-chapter$ git reset
Unstaged changes after reset:
M tex/MCMC-in-IRT.tex
M tex/recipe-example/build-example-plots.R
M tex/recipe-example/build-failure-plots.R
Bước 11: Nhìn lại fsck ...
nathanvan@nathanvan-N61Jq:~/workspace/mcmc-chapter$ git fsck --full
Checking object directories: 100% (256/256), done.
error: refs/heads/master.u1conflict does not point to a valid object!
dangling blob 03511c9868b5dbac4ef1343956776ac508c7c2a2
dangling blob dd09f7f1f033632b7ef90876d6802f5b5fede79a
Các đốm màu lơ lửng không có lỗi . Tôi không quan tâm đến master.u1 Conflict, và bây giờ nó đang hoạt động tôi không muốn chạm vào nó nữa!
Bước 12: Bắt kịp với các chỉnh sửa tại địa phương của tôi:
nathanvan@nathanvan-N61Jq:~/workspace/mcmc-chapter$ git status
# On branch master
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: tex/MCMC-in-IRT.tex
# modified: tex/recipe-example/build-example-plots.R
# modified: tex/recipe-example/build-failure-plots.R
#
< ... snip ... >
no changes added to commit (use "git add" and/or "git commit -a")
nathanvan@nathanvan-N61Jq:~/workspace/mcmc-chapter$ git commit -a -m "recovering from the git fiasco"
[master 7922876] recovering from the git fiasco
3 files changed, 12 insertions(+), 94 deletions(-)
nathanvan@nathanvan-N61Jq:~/workspace/mcmc-chapter$ git add tex/sept2012_code/example-code-testing.R
nathanvan@nathanvan-N61Jq:~/workspace/mcmc-chapter$ git commit -a -m "adding in the example code"
[master 385c023] adding in the example code
1 file changed, 331 insertions(+)
create mode 100644 tex/sept2012_code/example-code-testing.R
Vì vậy, hy vọng rằng có thể được sử dụng cho mọi người trong tương lai. Tôi rất vui vì nó đã làm việc.
git add
hoạt động? Đĩa cứng của bạn đã đầy chưa?