如何修复从树到树的git错误断链?

时间:2016-04-26 21:56:31

标签: git

我的事务被中断了,当我再次尝试时,我遇到了空的或损坏的对象的错误,继另一个问题后我删除了所有空文件,当我运行时

git fsck --full 

我收到了这个错误

Checking object directories: 100% (256/256), done.
Checking objects: 100% (48774/48774), done.
error: d193ccbc48a30e8961e9a2515a708e228d5ea16d: invalid sha1 pointer in cache-tree
error: df084ac4214f1a981481b40080428950865a6b31: invalid sha1 pointer in cache-tree
broken link from    tree 4bf4869299b294be9dee4ecdcb45d2c204ce623b
          to    tree df084ac4214f1a981481b40080428950865a6b31
broken link from    tree 4bf4869299b294be9dee4ecdcb45d2c204ce623b
          to    tree d193ccbc48a30e8961e9a2515a708e228d5ea16d
missing tree df084ac4214f1a981481b40080428950865a6b31 
missing blob a632281618ca6895282031732d28397c18038e35
missing tree d193ccbc48a30e8961e9a2515a708e228d5ea16d
missing blob 70aa143b05d1d7560e22f61fb737a1cab4ff74c6
missing blob c21c0545e08f5cac86ce4dde103708a1642f23fb
missing blob 9f341b8a9fcd26af3c44337ee121e2d6f6814088
missing blob 396aaf36f602018f88ce985df85e73a71dea6f14
missing blob 87b9d1933d37cc9eb7618c7984439e3c2e685a11

知道我不知道如何解决这个问题。

3 个答案:

答案 0 :(得分:5)

使用Git 2.10(2016年第3季度),您可以更多地了解这些断开链接的来源。

git fsck --name-objects

commit 90cf590commit 1cd772ccommit 7b35efdcommit 993a21bJohannes Schindelin (dscho)(2016年7月17日)。{
(由Junio C Hamano -- gitster --合并于commit 9db3979,2016年7月25日)

  

fsck:可选择显示更多有用信息的链接

     

当报告提交/树/ blob之间的断开链接时,如果告诉用户该对象应该如何可达,那么这将非常有用。

     

使用新的--name-objects选项,git-fsck会尝试做到这一点:
  以一种显示它们如何可达的方式命名对象。

     

例如,当某些reflog被破坏并且丢失了一个不应该的blob时,用户可能想要删除相应的reflog条目。
  此选项可帮助他们找到该条目:git fsck --name-objects现在将报告此类内容:

broken link from    tree b5eb6ff...  (refs/stash@{<date>}~37:)
              to    blob ec5cf80...

如果这些断开的链接不是来自本地存储,而是来自远程仓库,fetching those pack objects can then solve the situation
另请参阅&#34; How to recover Git objects damaged by hard disk failure?&#34;。

答案 1 :(得分:4)

对我来说,解决此“断开链接”错误的原因是此处列出的sehe回答有关如何解决无法找到错误的问题的答案:

Git Error: unable to find

  

就像Adam说的那样,从另一个存储库/克隆中恢复对象。

     
      
  1. 在'完整'的git数据库上:
  2.         

    git cat-file -p a47058d09b4ca436d65609758a9dba52235a75bd&gt;临时文件

         
        
    1. 并在接收端:
    2.         

      git hash-object -w tempfile

一个重要的补充是在步骤1和2之间,重要的是直接将文件从一个位置传输到另一个位置。根据我的经验,使用GIT push and pull来移动tempfile是行不通的。

答案 2 :(得分:1)

git gc --aggressive将清除不必要的文件并优化本地存储库。

您可以使用git fsck --full

验证问题是否已解决