误对落后5个commit的分支rebase并强制推送,如何找回同事的Git提交?
找回被rebase覆盖的Commit解决方案
优先用本地Git reflog恢复
Git会自动记录所有分支和HEAD的操作历史,哪怕是rebase这种改写提交历史的操作,都能在reflog里找到痕迹:
- 执行
git reflog查看操作日志,找到rebase执行前的分支状态对应的commit哈希。日志里会有类似HEAD@{n}: rebase finished: returning to refs/heads/你的分支名的记录,往前数的那条就是rebase前的最后一个commit(也就是同事那5个commit的末尾)。 - 直接恢复当前分支到该commit:
git reset --hard 找到的哈希值,或者先创建一个新分支保存这些commit:git branch 恢复分支名 找到的哈希值,避免影响当前分支。 - 确认找回后,执行
git push -f origin 你的分支名,把远程分支恢复到正确状态。
若本地reflog无记录,检查远程托管平台的分支历史
像GitHub、GitLab这类平台通常会保留分支的历史版本,即使被强制推送覆盖。你可以在分支的页面里找到"提交历史"或"恢复版本"的选项,定位到被覆盖的那5个commit,直接在平台上恢复分支,或者把对应的commit哈希拉到本地处理。
关键提醒
- 操作前先备份当前分支:
git branch 备份分支名,防止误操作导致更多丢失。 - 强制推送前务必确认其他同事还没基于错误的分支版本做新提交,不然会覆盖他们的工作,最好先和团队沟通。
内容的提问来源于stack exchange,提问作者richard burns
相关产品推荐
相关产品推荐

