git status
输出以下内容:
# On branch master
error: corrupt loose object '1e2dc6d8b6eec682f3ecc9dd879445fea5d6a34d'
fatal: loose object 1e2dc6d8b6eec682f3ecc9dd879445fea5d6a34d (stored in .git/objects/1e/2dc6d8b6eec682f3ecc9dd879445fea5d6a34d) is corrupt
我有12个非推送提交。我可以在git log
中看到它们。
有没有希望推动他们?
git push
输出:
error: corrupt loose object '1e2dc6d8b6eec682f3ecc9dd879445fea5d6a34d'
fatal: loose object 1e2dc6d8b6eec682f3ecc9dd879445fea5d6a34d (stored in .git/object/1e/2dc6d8b6eec682f3ecc9dd879445fea5d6a34d) is corrupt
error: failed to push some refs to 'git@bitbucket.com:username/reponame.git'
在我运行这些损坏的文件之前:
find . -type f -print0 | xargs -0 sed -i 's/\s\+$//g'
(在git repo目录中)
这会影响.git
个文件。
更新:我尝试了运行以下命令的VonC's suggestion:
cd ~
$ git clone git@bitbucket.org:username/reponame.git
Cloning into 'reponame'...
remote: Counting objects: 1561, done.
remote: Compressing objects: 100% (853/853), done.
remote: Total 1561 (delta 966), reused 1067 (delta 642)
Receiving objects: 100% (1561/1561), 223.80 KiB | 94.00 KiB/s, done.
Resolving deltas: 100% (966/966), done.
Checking connectivity... done
$ cd reponame/
$ $ git remote add yourLocalRemoteName /home/user/corupted/git/repository/folder
$ git pull yourLocalRemoteName
fatal: attempt to fetch/clone from a shallow repository
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
答案 0 :(得分:3)
您可以尝试:
在新克隆中添加引用当前本地克隆的远程
git remote add corrupt/path/to/your/first/cloned/repo
git pull corrupt
,然后是git push
话虽如此,在使用git fsck
进行确认后,您可以尝试solve that corrupt object
像往常一样,首先备份该本地仓库。
在discussion之后,结果是:
腐败的回购是浅的(通过工具自动克隆)
这意味着即使您rm .git/shallow
执行suggested here,也可以轻松克隆它。
取消浅析回购的一种方法是unpack a fresh repo并将.git/objects/pack
文件夹复制到损坏的仓库:
git clone git@bitbucket.org:username/reponame.git repo2
mkdir packs
cp repo2/.git/objects/packs/* packs
cd repos2
git unpack-objects < ../packs/*.pack
cd ..
cp -r repo2/.git/objects/* corrupt/.git/objects/
这将删除由于sed
命令损坏旧版解包对象而导致的任何错误,但这不会修复自该克隆以来所做的错误。
对于损坏的仓库,常用命令列在this answer和this comment中 最后,OP有:
git fsck --full
error: corrupt loose object '3ddb67eb5343e75ac36656c86c4386f8dd117df4'
fatal: loose object 3ddb67eb5343e75ac36656c86c4386f8dd117df4 (stored in .git/objects/3d/db67eb5343e75ac36656c86c4386f8dd117df4) is corrupt
(不再:
error: inflate: data stream error (incorrect data check)
error: sha1 mismatch ...
这是因为遗留提交已损坏)
为了解决这个问题,可以尝试遵循“Documentation/howto/recover-corrupted-blob-object.txt
”。
话虽如此,如果不成功,最好至少将所有最后提交分组为一个:
git clone git@bitbucket.org:username/reponame.git repo2
cd repo2
git --work-tree=../corrupt add -A .
git commit -m "last changes"
git push
可以尝试重建所有12次提交,但这并不明显,尤其是在一个文件中进行多次修改时。