git提交的时候出现异常“bad object HEAD”的另一种解决方案

这篇具有很好参考价值的文章主要介绍了git提交的时候出现异常“bad object HEAD”的另一种解决方案。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Git仓库是目前很主流的代码管理工具,一旦被损坏或出现异常,内心想直接吐血。

当进入到Git仓库执行命令:

git status

显示:

fatal: bad object HEAD

在此尝试用git checkout git reflog 等命令希望能恢复,但都是提示错误。在网上搜索大部分看到的是如下的解决方式:

git pull origin hongchangfirst

将远程分支的内容重新sync下来即可。

但是我的代码分支很久没有和服务器的分支同步,主要是做本机的开发和维护,无法用上面的命令来解决。

突然想到了git的代码是压缩过,用的是SHA-1哈希做的索引管理,分支是通过同名文件+SHA-1哈希管理,根据这一思路开始搜索分支同名文件。


假设我分支名为:v2_pro_ipv6

当前分支名可以尝试执行分支命令获取:

$ git branch

如果当前分支名都无法获取可以在以下文件中查到:

$ cat .git/HEAD 
ref: refs/heads/v2_pro_ipv6

至此已经确定了当前分支的名称:v2_pro_ipv6

先进入代码的.git目录:

$ cd .git/

搜索当前分支的同名文件:

$ find -name "v2_pro_ipv6"
./refs/remotes/local_server/v2_pro_ipv6
./refs/heads/v2_pro_ipv6
./logs/refs/remotes/local_server/v2_pro_ipv6
./logs/refs/heads/v2_pro_ipv6

去对应目录打开对应的分支同名文件,拉倒文件的最后一行,正常的话最后一行是一个空白行,如果异常的话,显示会是乱码如:

NULNULNULNULNULNULNULNUL

把文件中这行乱码的内容删掉,但还是要保留文件的最后一行为空行。

重点

打开.git\logs\refs\heads\v2_pro_ipv6文件,拉倒最后,就会看到出git现异常时最后一次提交的信息,我的是:

66fed7f2fd90cc003fa31475ff19fb673ebff3fe a3f70edf4fa72c320d48fcc477189ea40ac98407 admin <yinluo@yinluo.com> 1642210854 +0800	commit: 更新: APK 2022-1-14
a3f70edf4fa72c320d48fcc477189ea40ac98407 98b9d84c7725cf2f160154866e8cab33582ebc67 admin <yinluo@yinluo.com> 1642211131 +0800	commit: 添加:关闭spk mute静音功能sys.audio.spkmute.status
98b9d84c7725cf2f160154866e8cab33582ebc67 e0adae9cff4df7ea3f46f2e3cfecc9efde45efb5 admin <yinluo@yinluo.com> 1642211605 +0800	commit: 更新:wifi驱动 rkwifi/bcmdhd v100.10.545.25

细心的同学会发现每一行的定义规律,每行的开头两组是我们commit 的SHA-1哈希码。第一组SHA-1哈希是倒数第二次的提交,第二组是倒数第一次提交的SHA-1哈希。我们需要的就是第二组SHA-1哈希:

e0adae9cff4df7ea3f46f2e3cfecc9efde45efb5

把这组SHA-1哈希复制到一下文件:

打开文件:
.git\refs\heads\v2_pro_ipv6
看里面是否有内容,如果有的话,先在其他目录拷贝备份一下这个文件。然后把源文件的内容清空。
写入查到的SHA-1哈希码加回车换行:
e0adae9cff4df7ea3f46f2e3cfecc9efde45efb5
保持git文件中的最后一行为空行。

修改分支同名文件后,返回shell中执行git log 进行测试,如果操作正常,一切就能恢复如初了:


$ git log
commit e0adae9cff4df7ea3f46f2e3cfecc9efde45efb5
Date:   Sat Jan 15 09:53:25 2022 +0800

    更新:wifi驱动 rkwifi/bcmdhd v100.10.545.25

commit 98b9d84c7725cf2f160154866e8cab33582ebc67
Date:   Sat Jan 15 09:45:31 2022 +0800

    添加:关闭spk mute静音功能sys.audio.spkmute.status

commit a3f70edf4fa72c320d48fcc477189ea40ac98407
Date:   Sat Jan 15 09:40:54 2022 +0800

 最后,git要注意间隔一段时间就要和git主服务器做代码同步,以免git出现致命错误导致全盘皆废。另外注意点是在修改文件时,一定要记得保存哦!


 文章来源地址https://www.toymoban.com/news/detail-433814.html

到了这里,关于git提交的时候出现异常“bad object HEAD”的另一种解决方案的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • osgfbo(七)纹理坐标的另一种表示方法

    在此,先修改下osgfbo(五)中纹理坐标的表示方法,不是说osgfbo(五)中的做法不对,而是我更愿意明确的把纹理坐标数组赋值到(0,1)之间。即 1,设置纹理坐标 osg::ref_ptrosg::Vec2Array texCoord = new osg::Vec2Array; texCoord-push_back(osg::Vec2(0.0, 0.0)); texCoord-push_back(osg::Vec2(1.0, 0.0)); texCoord

    2023年04月08日
    浏览(43)
  • git cherry-pick 报错 fatal: bad object [commitID]

            项目不同模块的功能建立了不同的分支进行开发,后期要将这部分代码从附属分支往主分支上合并,合并过程中出现这个问题,特此纪要!         git cherry-pick [commitID]时报错? 错误图录:         cherry-pick做的动作是代码合并的操作,出现上面的异常是因为获

    2024年01月18日
    浏览(35)
  • SQL100 确定最佳顾客的另一种方式(二)

    OrderItems表代表订单信息,确定最佳顾客的另一种方式是看他们花了多少钱,OrderItems表有订单号order_num和item_price商品售出价格、quantity商品数量 order_num item_price quantity a1 10 105 a2 1 1100 a2 1 200 a4 2 1121 a5 5 10 a2 1 19 a7 7 5 Orders表含有字段order_num 订单号、cust_id顾客id order_num cust_id a1

    2023年04月22日
    浏览(57)
  • github 通过ssh进行连接的另一种方式

    一般使用ssh连接是通过22端口。如果已经把ssh公钥假如到了github中还无法连接。可以通过 测试一下。如果报出 ssh: connect to host github.com port 22: Connection timed out 可以通过443 端口进行连接 注意:端口 443 的主机名为 ssh.github.com,而不是 github.com。 也需修改项目地址

    2024年01月20日
    浏览(41)
  • 拥抱jsx,开启vue3用法的另一种选择??

    公司高级表单组件ProForm高阶组件都建立在jsx的运用配置上,项目在实践落地过程中积累了丰富的经验,也充分感受到了jsx语法的灵活便捷和可维护性强大,享受到了用其开发的乐趣,独乐乐不如众乐乐,为了帮助大家更好的运用jsx,开发提效,特此总结分享。 以往我们开发

    2024年02月08日
    浏览(71)
  • 智能家居的另一种形式:智能家居中心的技术架构

    作者:禅与计算机程序设计艺术 随着智能设备的普及、互联网技术的飞速发展以及人们对智能家居产品的追求,越来越多的人选择将家居环境变成一个“智能”的地方,比如通过智能安防系统、智能遥控器、智能监控等方式帮助用户实现更加精细化的生活控制和场景管理。但

    2024年02月07日
    浏览(45)
  • 使用git时候提交时候发生冲突,你能解释冲突如何产生,你是如何解决的

    Git冲突情况举例: 简单来说就是本地修改的文件和目标远程库的同一个文件都有修改。这时无论是pull/push/merge时都会产生冲突。 1、不同分支下的merge 比如在不同分支下进行分支合并时,我们在本地修改了a文件并把a文件的修改push到了test分支下,接着我们切换到master分支下将

    2024年02月08日
    浏览(36)
  • 路由器端口转发&远程桌面控制:一电脑连接不同局域网的另一电脑

    一、引言          路由器端口转发 :指在路由器上设置一定的规则,将外部的数据包转发到内部指定的设备或应用程序。这通常需要对路由器进行一些配置,以允许外部网络访问内部网络中的特定服务和设备。端口转发功能可以实现多种应用场景,例如远程桌面、FTP、

    2024年04月15日
    浏览(39)
  • STM32-HAL库08-TIM的输出比较模式(输出PWM的另一种方式)

    STM32F103C6T6最小系统板 STM32CUBEMX(HAL库软件) MDK5 示波器或者逻辑分析仪 通过定时器TIM的输出比较模式得到预定频率与占空比的PWM波形;其中定时器输出比较模式与PWM模式的区别在于!!! PWM模式在同一个TIM下所有输出口的频率一致不能单独控制单个的频率 ,而输出比较模式

    2024年02月03日
    浏览(43)
  • git reset回退版本【Git异常】You are in ‘detached HEAD‘ state

    git clone项目后,在main分支回退版本,出现报错 detached HEAD称为分支游离状态 1、从远程库clone下来一个远程的repository; 2、clone下来之后,git自动在本地建立了一个本地分支master,并自动与远程库master关联; 3、现在在操作checkout其他分支名(dev_v1);因为本地的工作区目前是刚刚

    2024年02月11日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包