误执行git push -f覆盖远程提交,如何恢复历史提交?
恢复被强制推送覆盖的GitHub仓库提交历史
方法一:通过GitHub网页端找旧提交恢复
- 打开你的GitHub仓库页面,点顶部的「Commits」标签
- 拉到页面最底部,点「Browse the full commit history」
- 在这个页面里能找到被覆盖前的所有旧提交,找到你要恢复的那个分支最后一个正常提交,复制它的完整提交哈希值
- 克隆一个新的本地仓库(或者直接下载当前仓库的ZIP包),进入仓库目录
- 执行命令切换到旧提交:
git checkout <复制的旧提交哈希值> - 创建新分支保存恢复的历史:
git checkout -b restored-history - 把这个分支推送到远程:
git push origin restored-history - 之后可以把这个恢复分支合并回master,或者直接用它替换master(确认无误后执行
git push -f origin restored-history:master)
方法二:用GitHub的仓库快照恢复
- 打开仓库的「Settings」页面
- 拉到最底部的「Danger Zone」区域,点击「Restore repository」(GitHub会保留最近的仓库快照)
- 按照提示选择要恢复的时间点,完成操作即可
方法三:通过Git远程reflog恢复
- 本地克隆新的仓库副本:
git clone https://github.com/你的用户名/你的仓库名.git - 进入仓库目录后,执行命令查看远程分支的操作记录:
git reflog show origin/master - 从列表里找到被强制推送前的提交哈希值,执行
git checkout <旧提交哈希值> - 后续步骤和方法一一致,创建新分支并推送到远程
注意:GitHub的提交记录快照和reflog一般会保留90天左右,超过这个时间可能无法恢复。
内容的提问来源于stack exchange,提问作者NeoSheo
相关产品推荐
相关产品推荐

