git reference broken 记一次断电引发的git翻车事件,我丢失了stable分支
背景
有些配置需要更新上线,代码在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负载过高,然后断电了
参考

0 comments
To reply to the article, please Login or registered