git 强推覆盖了别人的提交怎么恢复
git push -f 之后才发现把远程别人的提交覆盖没了,同事的代码在远程被抹掉,团队一片慌乱,不知道还能不能救回来。
有人这样说「完了,我git push -f把同事的代码全覆盖了,现在群里都炸了。」
能替你选的都选好了。不想动,直接点下面「交给 AI 办」,点一下就开始做;想改,就点一下要的那个。
已替你选好想改就点一下
只有你知道的不填就先空着,成品里留【待填】
还想怎么改可以不选
高级选项一般不用动 · 这件事通常 1 分钟左右做好
示例成品全文按上面这组示例选项真跑出来的
先别跑 git gc、git prune,也别再随便 push -f。git log 看不到被覆盖的提交很正常,因为它只看当前历史;要找回要看 reflog。
按顺序做:
1. 在强推那台机器上找旧提交 SHA
git reflog show main --date=iso如果你就是 reset 过头后强推的,直接看 reset 附近:
git reflog show main --date=iso | grep -B5 -A5 'reset'reset 前一条的 SHA,通常就是被覆盖前的旧 main 顶端。找到同事的提交说明更容易确认。
2. 先把旧 SHA 推到恢复分支
不要急着动 main,先保住代码:
git branch recover-old <旧SHA>
git push origin recover-old这一步不会破坏现在的主分支。
3. 让同事确认
让同事执行:
git fetch origin
git log origin/recover-old确认被覆盖的提交都回来了。
4. 决定要不要恢复 main
如果强推后的 main 上没有任何需要保留的提交,可以恢复:
git push origin <旧SHA>:main --force然后通知所有已经拉了坏 main 的人:
git fetch origin
git reset --hard origin/main注意:reset --hard 会清掉本地未提交改动,让他们先 git stash。
如果已经有人在坏 main 上产生了新提交,别直接 force push,用合并方式把旧代码合回来:
git checkout main
git merge recover-old
git push origin main如果强推那台机器找不到旧 SHA:
让同事在本地执行:
git reflog show origin/main --date=iso或者让还没 pull 的同事执行:
git rev-parse origin/main拿到的 SHA 就是旧提交,再按第 2 步推到 recover-old 分支。