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

如何回退远程仓库最后一次提交但保留本地未就绪提交?

当然可以!这完全能做到,分两种场景给你讲具体操作:

场景1:远程分支是你个人使用的(无其他协作人员)

这种情况可以直接强制回退远程分支,同时保留本地未推送的提交,步骤如下:

  1. 临时保存本地未推送的提交(防止操作中丢失)
    假设你当前在main分支,本地有一个未推送的提交,先创建一个临时分支保存它:

    git branch temp-save
    
  2. 回退本地分支到远程需要回到的状态
    远程的最后一次提交就是你之前推上去的那次,现在要回退到它的上一个版本,执行:

    git reset --hard HEAD~1
    

    这时候你的本地main分支就回到了远程最后一次提交之前的状态。

  3. 强制推送覆盖远程分支
    把本地回退后的分支推送到远程,覆盖掉远程的最后一次提交:

    git push -f origin main
    

    注意:-f是强制推送,只有在分支是你个人独用的时候才建议这么做,不然会打乱其他协作人员的工作。

  4. 恢复本地未推送的提交
    现在把之前临时保存的提交cherry-pick回当前分支:

    git cherry-pick temp-save
    

    完成后你可以删除临时分支:

    git branch -d temp-save
    

    这时候你的本地main分支就保留了那个未就绪的提交,而远程已经回退到了之前的版本。

场景2:远程分支是多人协作的(禁止强制推送)

如果这个远程分支还有其他人在使用,强制推送会引发问题,这时候应该用revert来撤销远程的最后一次提交,步骤如下:

  1. 临时保存本地未推送的提交
    同样先创建临时分支保存本地的未就绪提交:

    git branch temp-save
    
  2. 拉取远程最新状态并对齐本地分支
    把本地分支重置到和远程完全一致的状态:

    git reset --hard origin/main
    
  3. 创建撤销提交并推送到远程
    执行revert命令,撤销远程的最后一次提交:

    git revert HEAD
    

    这时候会弹出编辑器让你填写撤销提交的说明,保存退出即可。然后把这个撤销提交推送到远程:

    git push origin main
    

    这种方式是通过新增一个提交来抵消之前的改动,不会覆盖其他人的提交记录,对协作分支更友好。

  4. 恢复本地未推送的提交
    最后把临时分支的提交cherry-pick回来:

    git cherry-pick temp-save
    

    再删除临时分支:

    git branch -d temp-save
    

    现在本地依然保留着那个未就绪的提交,远程也完成了回退。

额外小提示

  • 操作前最好用git log --oneline查看提交历史,确认远程和本地的提交顺序,避免搞错要回退的版本。
  • 如果本地还有未commit的改动,记得先用git stash暂存,操作完再用git stash pop恢复。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:41:36