幸福飞过海 - 2021年12月 https://fengqi.me/2021/12/ 风起的网络记事本 恢复git push -f丢失的提交 https://fengqi.me/unix/602.html 2021-12-17T09:33:00+00:00 如果有人本地仓库比较新,让他暂时不要更新,并 git push -f,然后你拉取并合并即可,同时吸取教训,将重要分支设置为保护,如果是在线修改或没人拉取最新代码,能否恢复取决于远端仓库是否执行gc,否则神仙也救不回来了。以没有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远程仓库,大概率也没救了。