以没有gc过为例,登录到远程git服务器,并找到仓库所在目录,以我使用的gitea为例,gitlab类似:
git clone /home/git/gitea-repositories/fengqi/exmaple.git rescue
cd rescue
# 查找丢失的提交,如果没有输出commit表示没救了
git fsck --lost-found
Checking object directories: 100% (256/256), done.
Checking objects: 100% (31/31), done.
dangling commit 558aac381bc8acb161447686361928e2e2edc9bf
dangling blob 82f865770e1590763574a60d53286f2102f6b03b
dangling blob d912156bec00a9f00850ab2ec3a3baf1016c2141
dangling blob f02e11383e55a7f7ac33d8dc6554ce4901e55a64
# 查看内容
git show 558aac381bc8acb161447686361928e2e2edc9bf
git checkout branch_xxx
git rebase 558aac381bc8acb161447686361928e2e2edc9bf
# 这里可能提示和远端不一样导致push失败,可以fetch后rebase,也可以pull,看你喜好
git push branch_xxx
因为原始信息只在远端,如果你没有权限登录到git远程仓库,大概率也没救了。
]]>