如果git文件包含损坏的松散对象,是否可以推送非推送提交?
如果git文件包含损坏的松散对象,是否可以推送非推送提交?,git,recovery,Git,Recovery,git状态输出以下内容: # On branch master error: corrupt loose object '1e2dc6d8b6eec682f3ecc9dd879445fea5d6a34d' fatal: loose object 1e2dc6d8b6eec682f3ecc9dd879445fea5d6a34d (stored in .git/objects/1e/2dc6d8b6eec682f3ecc9dd879445fea5d6a34d) is corrupt 我有12个非推
git状态
输出以下内容:
# On branch master
error: corrupt loose object '1e2dc6d8b6eec682f3ecc9dd879445fea5d6a34d'
fatal: loose object 1e2dc6d8b6eec682f3ecc9dd879445fea5d6a34d (stored in .git/objects/1e/2dc6d8b6eec682f3ecc9dd879445fea5d6a34d) is corrupt
我有12个非推送提交。我可以在git日志中看到它们
有希望推动他们吗
git推送
输出:
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
文件
更新:我尝试运行以下命令:
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.
您可以尝试:
- 再次克隆您的BitBucket回购
- 在新克隆中添加一个远程引用当前本地克隆
git remote add corrupt/path/to/your/first/cloned/repo
,然后git pull已损坏
git push
也就是说,在使用确认后,您可以尝试和。
像往常一样,首先备份本地回购协议
之后,事实证明:
- 腐败的回购协议是肤浅的(通过工具自动克隆)。
这意味着您可以很容易地克隆它,即使在您执行
时也是如此rm.git/shallow
- 取消允许浅层回购的一种方法是将文件夹复制到损坏的回购:
(除此之外: 这是由于遗留问题(提交已损坏) 要解决这个问题,可以尝试按照“”进行操作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/
也就是说,如果这不能实现,那么至少可以将所有最后的提交组合成一个: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次提交,但这并不明显,特别是当在一个文件中进行多个修改时。您能解释一下您的LocalRemoteName是什么意思吗?我在运行
时出现此错误:*git pull yourLocalRemoteName
*@IonicăBizău这只是您的远程设备的名称。用您想要的任何名称替换它,例如致命:尝试从浅存储库获取/克隆致命:无法从远程存储库读取。请确保您具有正确的访问权限,并且存储库存在。
。@IonicăBizău您是否在第二个本地克隆repo中执行了repo1
?是的,我执行了。。。可能需要git远程添加repo1/local/path/to/your/first/repo
文件夹的路径?我编辑了答案以反映我们讨论的内容。.git
error: inflate: data stream error (incorrect data check) error: sha1 mismatch ...
git clone git@bitbucket.org:username/reponame.git repo2 cd repo2 git --work-tree=../corrupt add -A . git commit -m "last changes" git push