git switch -c rescue/colleague 4c1b2d8
git push origin rescue/colleague
git push --force-with-lease origin feature

为了清掉一个提交用了 push -f,同事推上来才发现他昨天三条提交不在主干了。他本地 git log 还有,远端分支已经指到我的版本。先别急着动参数,把报错原文和时间点记下来,顺序反了容易白折腾。

原因不复杂,force push 直接把远端引用改成指定提交,中间那些提交从分支上消失。服务端默认不开 reflog,能否找回取决于托管平台有没有保留悬空提交。

围绕「force push 覆盖」排查时,命令行跑一遍比在面板里点十次有用,面板会替你做掉不少隐式操作。动手前把原文件复制一份带时间戳,出问题立刻换回去,比现场分析快得多。

一次只改一处,改完立刻验证,几个改动叠在一起,出问题就说不清是谁导致的。

处理上按这个顺序:先让同事别 pull 也别 reset 他本地的提交还在;在同事机器上 git log --oneline 找到那三条的哈希;新建分支把提交推上去 再合回主干;服务端支持的话用平台的悬空提交接口兜底;之后统一改用 git push --force-with-lease。

改完只确认一件事:主干上重新出现那三条提交 远端分支哈希与本地一致。

作者 9823189