git reference broken 记一次断电引发的git翻车事件,我丢失了stable分支

本文记述了一次因突发断电导致Git仓库损坏的经历,包括如何定位问题、采取应急措施及最终解决的过程。通过这次经历,作者强调了定期备份的重要性,并分享了解决Git服务器文件损坏的具体步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景

有些配置需要更新上线,代码在new-dev, 然后在stable分支上面cherry-pick new-dev分支上的commit id 然后 git push代码到服务器上面,此时正好停电了。过了不久,恢复供电。 此时执行命令git status

fatal: Not a git repository (or any of the parent directories): .git
复制代码

什么,不是git仓库,通常想到的就是.git文件找不到,不可能啊

ls -la .git
复制代码
total 1237
drwxr-xr-x 1 Administrator 197121       0 Jun 22 15:28 .
drwxr-xr-x 1 Administrator 197121       0 Jun 22 15:28 ..
-rw-r--r-- 1 Administrator 197121      45 Jun 22 15:28 COMMIT_EDITMSG
-rw-r--r-- 1 Administrator 197121    1416 Jun 22 15:28 FETCH_HEAD
-rw-r--r-- 1 Administrator 197121      23 Jun 22 15:28 HEAD
-rw-r--r-- 1 Administrator 197121      41 Jun 22 15:28 ORIG_HEAD
-rw-r--r-- 1 Administrator 197121     580 Jun 11 17:12 config
-rw-r--r-- 1 Administrator 197121      73 Jun  4 18:04 description
drwxr-xr-x 1 Administrator 197121       0 Jun  4 18:04 hooks
-rw-r--r-- 1 Administrator 197121 1220081 Jun 22 15:28 index
drwxr-xr-x 1 Administrator 197121       0 Jun  4 18:04 info
drwxr-xr-x 1 Administrator 197121       0 Jun  4 18:04 logs
drwxr-xr-x 1 Administrator 197121       0 Jun 22 15:28 objects
-rw-r--r-- 1 Administrator 197121    7708 Jun  4 18:04 packed-refs
drwxr-xr-x 1 Administrator 197121       0 Jun 22 16:26 refs
复制代码

于是偷个懒,懒得修复了,直接git clone一个新的项目,然后发现stable分支已经找不到了。这下我就慌了,还好昨天有人修改上线, 之后也没有人修改代码,有最新的tag。按照如下操作,发现代码提交不上去,于是搜索了一下reference broken[1],说是服务器文件有损坏, refs/heads/statble中的commit id为空或者乱码。

于是找来运维大哥上gitlab服务器上面看看,果然,resf/heads/stable中的commit id,为空,然后我到本地的同级目录下看看这个文件 里的字节全是0。从tag把最新的commit id写入这个文件,然后stable分支就出现了。

root@ubuntu:/mnt/api-xxx# git checkout xxx-release-5.0.4.201806211050
root@ubuntu:/mnt/api-xxx# git checkout -b stable
root@ubuntu:/mnt/api-xxx# git push --set-upstream origin stable
Total 0 (delta 0), reused 0 (delta 0)
remote: error: cannot lock ref 'refs/heads/stable': unable to resolve reference 'refs/heads/stable': reference broken
To gitlab.xxx.tv:xxx/api.git
 ! [remote rejected]     stable -> stable (failed to update ref)
error: failed to push some refs to 'git@gitlab.xxx.tv:xxx/api.git'
复制代码

总结

定时备份数据(不局限在这个项目上面,这个有tag),断电这种不可抵抗力因素,如果遇到了,可能一下午还要加班在填坑

到最后我我还在yy,是我push这个commit导致gitlab负载过高,然后断电了

参考

  1. my.oschina.net/Tyrfing/blo…
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值