相关文章推荐
有腹肌的油条  ·  Typescript ...·  2 年前    · 
善良的稀饭  ·  filestreamresult get ...·  2 年前    · 
Collectives™ on Stack Overflow

Find centralized, trusted content and collaborate around the technologies you use most.

Learn more about Collectives

Teams

Q&A for work

Connect and share knowledge within a single location that is structured and easy to search.

Learn more about Teams

I did a Git pull when I was near my quota, and as a result (so I think), got a corrupted file:

$ git pull
walk dffbfa18916a9db95ef8fafc6d7d769c29a445aa
fatal: object d4a0e7599494bfee2b5351113895b43c351496b3 is corrupted
$ git fsck --full
bad sha1 file: .git/objects/66/b55c76947b1d38983e0944f1e6388c86f07a1b.temp
fatal: object d4a0e7599494bfee2b5351113895b43c351496b3 is corrupted
$ git cat-file -t d4a0e7599494bfee2b5351113895b43c351496b3
error: unable to find d4a0e7599494bfee2b5351113895b43c351496b3
fatal: git cat-file d4a0e7599494bfee2b5351113895b43c351496b3: bad file

How can I solve this corruption?

.git/objects/66/b55c76947b1d38983e0944f1e6388c86f07a1b.temp was zero bytes; deleting it did nothing to solve my problem (same errors).

The contents must sha1 sum to the filename. There's no way to restore the contents based on the hash, so unless git has some kind of redundancy built in for this exact situation (I can't say it doesn't) I'd say you need to re-fetch or clone the remote again. – user229044 Nov 6, 2010 at 3:32 You said you deleted it - did you try pulling again after that? A zero size temporary object smacks of an aborted transfer... – Cascabel Nov 6, 2010 at 3:37 The output of find . -name d4a0e7599494bfee2b5351113895b43c351496b3 is nothing. Deleting the sha1 file then pulling just results in the empty sha1 file being generated. – Mike Nov 6, 2010 at 3:40 Also $ git cat-file -t d4a0e7599494bfee2b5351113895b43c351496b3's output is: error: unable to find d4a0e7599494bfee2b5351113895b43c351496b3 fatal: git cat-file d4a0e7599494bfee2b5351113895b43c351496b3: bad file – Mike Nov 6, 2010 at 4:28 That's not where that object would be stored. It'd be .git/objects/d4/a0e7599.... You could try backing up and removing that object (and removing any associated temporary files) and pulling again. – Cascabel Nov 6, 2010 at 4:37

You can use "find" for remove all files in the /objects directory with 0 in size with the command:

find .git/objects/ -size 0 -delete

Backup is recommended.

hmm, that helped, after suspend I've got a couple of objects empty and removing them allowed me to fetch real objects from remote repo. Luckily I did push just before suspend. Yet to see what's going on with files I did not commit yet, hopefully they were synced to disk before suspend. WARNING, better save the hashes you delete if further inspection is needed. – akostadinov Aug 11, 2015 at 13:39

In general, fixing corrupt objects can be pretty difficult. However, in this case, we're confident that the problem is an aborted transfer, meaning that the object is in a remote repository, so we should be able to safely remove our copy and let git get it from the remote, correctly this time.

The temporary object file, with zero size, can obviously just be removed. It's not going to do us any good. The corrupt object which refers to it, d4a0e75..., is our real problem. It can be found in .git/objects/d4/a0e75.... As I said above, it's going to be safe to remove, but just in case, back it up first.

At this point, a fresh git pull should succeed.

...assuming it was going to succeed in the first place. In this case, it appears that some local modifications prevented the attempted merge, so a stash, pull, stash pop was in order. This could happen with any merge, though, and didn't have anything to do with the corrupted object. (Unless there was some index cleanup necessary, and the stash did that in the process... but I don't believe so.)

This might result in error: refs/heads/branch does not point to a valid object!. Make sure to backup. – Rad Apdal Jun 8, 2017 at 0:33 This is not particularly helpful. The corrupt object in question is almost certainly not one which needs recovering; it's one which was partially fetched from a remote. – Cascabel Nov 6, 2010 at 4:45 For me, I think PHPStorm corrupted .git on my machine. Thanks for the simple solution. I was getting nowhere trying the various suggestions, and didn't want to start again from a clone because there were lots of untracked per-installation files which needed to be added, but your "clone and swap" solution was what I was looking for. – Yimin Rong Jul 6, 2022 at 0:27 Should also mention, I just did a git status and that refreshed all the indices, so didn't have to add / commit / push. – Yimin Rong Jul 6, 2022 at 1:24 As @YiminRong said, it is only necessary to execute git status after you paste in your new .git folder. Thanks for the solution – Joseph Bradshaw Oct 11, 2022 at 8:29

The only thing that worked for me was to delete the git repo and configure it again:

rm -rf .git
git remote set-url origin <repo-url>

what I do is: shows what's in this repo, make sure you see a .git folder, (move first to root directory)

ls -a remove the .git folder sudo rm -r .git

make and move to a new dir where you can temporary store a new clone of the repo where you are working on.

cd ../ mkdir t007 cd t007

re-clone the repo where you are working on, and navigate to it

git clone cloneSshUrlOfGitRepo cd nameOfRepo

move the frech .git folder from the just cloned repo to the repo where you had a corrupt object, and where you deleted the .git folder. (after this stap your old repo should be up and running again, because you replaced the corrupt .git folder with a new one who should be working).

mv .git ../../nameOfRepo

now you should be able to remove the new cloned repo (because you don't need it anymore, we already moved its working .git folder in the previus step)

cd ../ sudo rm -r nameOfRepo

now you can move back to your repo where you were working on before you had this issue.

cd ../nameOfRepo

Thanks for contributing an answer to Stack Overflow!

  • Please be sure to answer the question. Provide details and share your research!

But avoid

  • Asking for help, clarification, or responding to other answers.
  • Making statements based on opinion; back them up with references or personal experience.

To learn more, see our tips on writing great answers.