my-git

Recover Force Push

force push 覆盖远端分支后,先找回正确 commit。

如果有人本地还保留旧分支,通常可以恢复。

先冻结现场

先通知团队暂停向相关分支 push。

然后在本地检查:

git reflog
git log --oneline --decorate -20

也可以让同事在本地找:

git reflog
git log --oneline --decorate -20

找到正确 commit

确认 good sha 后,先建备份分支:

git branch backup-good-branch <good-sha>

检查内容:

git show --stat <good-sha>
git diff <bad-sha>..<good-sha>

恢复远端分支

<protected-branch> 是被覆盖的实际远端分支,例如 main、master 或 develop。先确认目标、远端权限、分支规则和协作者影响范围,得到相关 owner 授权后再更新远端:

git push origin <good-sha>:<protected-branch>

如果主分支受保护,需要管理员处理。

后续补救

延伸阅读