如果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这只是您的远程设备的名称。用您想要的任何名称替换它,例如
    repo1
    。@IonicăBizău您是否在第二个本地克隆repo中执行了
    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