You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Git拉取后如何恢复拉取前的本地版本?

解决Git推送失败+恢复本地修改的步骤

一、先理清你遇到的问题

  1. 推送被拒原因:远程master分支存在你本地没有的新提交(可能是其他人或你在其他终端推送的),你的本地分支版本落后于远程。Git为了防止直接推送覆盖远程的新内容,就会抛出non-fast-forward错误,要求你先整合远程的更改。
  2. pull后修改丢失+reset的影响:你执行git pull后,Git自动合并了远程更新,导致本地修改被合并到新提交中(或未提交的修改被覆盖);后续的git reset改变了分支指针,但Git的reflog会记录所有操作痕迹,我们可以通过它恢复到之前的状态。

二、恢复到pull前的版本

  1. 查看所有操作历史,定位pull之前的提交:

    git reflog
    

    输出示例:

    abc1234 HEAD@{0}: reset: moving to HEAD~1
    def5678 HEAD@{1}: pull origin master: Merge made by the 'ort' strategy.
    ghi9012 HEAD@{2}: commit: 你的本地修改提交信息
    

    这里的ghi9012(或HEAD@{2})就是你执行git pull前的最后一次本地提交,记下这个哈希值。

  2. 恢复到该版本:

    git reset --hard ghi9012
    

    执行后,本地仓库和工作区就会回到pull前的状态,之前的本地修改会恢复。

三、正确处理后续推送

恢复后,用变基方式整合远程更新,避免多余的合并提交:

  1. 拉取远程最新内容并变基:
    git pull --rebase origin master
    
    这个命令会把你的本地提交“挪”到远程最新提交的后面,相当于在远程的基础上重新提交你的修改。
  2. 如果遇到冲突,Git会提示你解决,解决冲突后执行:
    git add .
    git rebase --continue
    
    (若想放弃变基,执行git rebase --abort)
  3. 变基完成后,推送本地提交:
    git push origin master
    

注意事项

  • git reset --hard会清除当前工作区和暂存区的所有改动,执行前务必确认要恢复的版本正确。
  • 以后如果有未提交的本地修改,先执行git stash暂存,拉取完成后再用git stash pop恢复,能有效避免修改被覆盖。

内容的提问来源于stack exchange,提问作者Sebb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 09:47:33