执行git push -f未先pull覆盖同事提交,如何撤销操作恢复分支状态?
Git 强制推送覆盖远程提交的撤销方案
方法一:通过本地 reflog 自行恢复
适用场景:你执行强制推送前,本地曾经拉取过同事的最新提交
- 执行命令查看分支的HEAD变更历史:
git reflog show [你的分支名] - 在输出的列表中找到你强制推送前的commit哈希值,该记录对应的操作一般为
pull/merge,标记为OLD_HEAD_HASH - 回退本地分支到该状态:
git reset --hard OLD_HEAD_HASH - 再次强制推送将远程分支恢复到被覆盖前的状态:
git push origin [你的分支名] --force
方法二:通过同事的本地分支恢复
适用场景:你本地已经找不到被覆盖的提交记录
直接让持有该分支完整提交记录的同事在他本地执行强制推送即可,他的本地分支还保留了被你覆盖前的所有提交:
git push origin [你的分支名]:[你的分支名] --force
后续操作建议
- 恢复完成后,你可以通过
git cherry-pick [你的提交哈希]将你自己的提交拣选到恢复后的分支上,再正常执行pull、push操作即可 - 后续需要强制推送时,优先使用
--force-with-lease参数代替--force,该参数会校验远程分支是否存在你本地没有的提交,避免误覆盖他人代码 - 所有恢复操作前可先执行
git tag temp_backup给当前本地分支打临时标签,避免操作失误丢失代码
内容的提问来源于stack exchange,提问作者donjonson
相关产品推荐
相关产品推荐

