如何处理Git";看不懂;错误
我在git存储库中遇到以下错误:如何处理Git";看不懂;错误,git,Git,我在git存储库中遇到以下错误: 22:09:15 $ git status # On branch master error: Could not read 8124cc15c63be92d534e4cdfa33c38d54deee122 error: unable to read tree object HEAD nothing to commit (working directory clean) 谷歌搜索错误:无法读取树对象头部不会带来太多帮助,这个错误似乎非常罕见。我不知道该怎么处理
22:09:15 $ git status
# On branch master
error: Could not read 8124cc15c63be92d534e4cdfa33c38d54deee122
error: unable to read tree object HEAD
nothing to commit (working directory clean)
谷歌搜索错误:无法读取树对象头部不会带来太多帮助,这个错误似乎非常罕见。我不知道该怎么处理。可能是硬盘故障吗
编辑:
git fsck
的输出如下:
broken link from commit 607328dc80e4901a55b95c683d4fbf43e6df28bf
to tree 8124cc15c63be92d534e4cdfa33c38d54deee122
missing tree 8124cc15c63be92d534e4cdfa33c38d54deee122
dangling tree 56b5d4a5e429d251582ec927bca7ef1225510c41
dangling tree 0259d2d38b18b6136bb6070fb41faf3624453cc6
在“断开链接”消息中,您可以按照以下步骤操作:
- 备份你所有的状态,这样你做的任何事情都是可行的,如果你腐败的事情更多李>
- 分解任何损坏的包文件
- 请参阅“
mangit unpack objects
”,特别是“-r
”标志。
另外,请注意,它只解压不可用的对象,因此您需要首先将包文件从其正常位置移开(否则,git unpack objects
将在包文件本身中找到包文件中的所有对象,而不解压任何内容)
- 更换任何损坏和/或丢失的物体
- 这是具有挑战性的部分。
有时(希望经常!)您可以在存储库的其他副本中找到丢失的对象。
在其他情况下,您可能需要尝试以其他方式查找数据(例如,您签出的副本可能包含文件内容,当对其进行哈希处理时,这些内容将是丢失的对象?)李>
- 确保使用“
git fsck--full
”时一切正常
- 重新打包所有内容以重新回到有效状态
注:
- 丢失的对象也可以(当您使用时)(即使如此)
- JGit/Egit eclipse插件也是众所周知的。
(2012年2月更新:取得了长足进步,目前相当稳定)
2016年7月更新(7年后),Git 2.10即将发布,您现在拥有:
git fsck --name-objects
它有助于命名这些断开链接的来源
有关详细信息,请参阅“” 我也有同样的问题。在做了很多分析之后,我发现这是由于更改了存储库git文件的权限造成的。我的解决办法如下:
$ cd .git
$ chmod 755 *
完成了 我刚才也有类似的问题。当我的笔记本电脑在一次git pull
过程中硬关机时,出现了损坏。我有一个远程备份存储库。首先,我在.git/objects/??/*中有几个大小为零的对象文件。在对存储库进行cp-a
备份后,我执行了以下操作:
- 删除零长度对象
- 将远程存储库克隆到
。/fresh/
存储库中
- 在破碎的存储库中,我做到了
cat../fresh/.git/objects/pack/pack-*.pack | git解包对象
这将填充对象数据库中缺少的对象。存储库似乎正在备份。如果没有未限制的更改,最简单的解决方案是删除本地分支:
git分行-D[分行名称]
然后再次签出远程分支:
git checkout-b[branch name]origin/[branch name]我在安装的git存储库中遇到了类似的错误。我发现简单地删除.git
目录并通过从中重新克隆来重新创建它比逐个恢复所有丢失的对象更容易。这是我的步骤:
检查Git存储库中哪些信息是通过重新克隆无法获得的。对我来说,这是私人的分支机构、藏匿处和偏远地区。
- 通过创建一个新分支、应用隐藏并在名称中使用“[WIP]”之类的内容进行提交,将隐藏转换为真正的提交,以表明它是一个隐藏
- 将不在公共远程上的分支推送到您自己的远程,以保存这些分支。这可能是GitHub上的一个存储库分支,也可能只是您机器上不同位置的一个新Git存储库
- 如果您有多个遥控器,请保存包含遥控器名称和URL的
git remote-v
的输出,以便以后手动添加它们
删除您的repostory的.git
目录(或者将其重命名为.git-breaked
并在以后删除)。在命令行上,这是rm-rf.git
使用git clone重新克隆远程目录https://github.com/Homebrew/homebrew.git
或任何URI
homebrew
。您只需要该目录中的.git
目录;你的本地文件已经正常了。所以mv homebrew/.git.git
,然后删除homebrew
文件夹- 如果您有其他遥控器,请使用
再次添加它们git remote add
- 如果将任何分支(或已转换为分支的存储)备份到远程存储库,请将它们从该存储库拉到本地存储库
- 如果需要,可以通过使用
回滚“[WIP]”提交,并使用git reset HEAD^
再次将工作目录保存到一个隐藏,将隐藏分支转换回隐藏git stash save
git fsck
,则不会看到任何错误:
$ git fsck
Checking object directories: 100% (256/256), done.
Checking objects: 100% (197135/197135), done.
Checking connectivity: 197162, done.
$
和
git stash list
、git branch
和git remote-v
应显示与以前相同的输出。我通过在同一目录/项目文件夹中进行更改修复了错误,然后尝试提交新的更改,发生的情况是,我收到一个错误消息“Book/alise_mathe/app/src/main/res/menu/drawermenu.xml的无效对象100644 e38e910ceb18b09f436f353c3a131bfe2caba130”
这个消息解决了这个问题,我只是通过将文件名更改为“drawer\u menu.xml”来重构drawermenu.xml。添加了提交的更改,仅此而已。(安卓工作室)
我希望这会有帮助