Git撤回已经提交(甚至已push)的代码,但把改动留在本地的解决

 更新时间:2026年05月29日 17:23:19   作者:程序员大龙虾  
这篇文章主要介绍了Git撤回已经提交(甚至已push)的代码,但把改动留在本地的解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

这个坑基本每个人都会踩一遍:

刚 commit 完,顺手 push 了。

过了两分钟发现:这提交现在不该上去

但问题是——

代码你还要留着,得继续改,而不是直接删掉。

这篇就讲一件事:

怎么把提交从历史里“抹掉”,但代码还留在本地

公共提交避免使用这个方法,如果你是独立开发,那没问题!!!

先说人话版结论

如果你只是:

  • 刚 push
  • 想撤回最近一次提交
  • 代码还要留着

直接用这两步就够了:

git reset HEAD~1
git push --force-with-lease origin main

执行完:

  • 远端没有这次提交
  • 本地 git log 也没有
  • 代码还在(变成未提交状态)

很多时候,到这一步就结束了。

这两条命令到底干了啥

第一条

git reset HEAD~1

意思是:

把当前分支往前退一个提交

但注意,它不会删你的代码,只是把:

  • commit 里的内容
  • 👉 变回工作区改动

所以你会看到:

  • 文件还在
  • 只是变成“未提交”

第二条

git push --force-with-lease origin main

意思是:

用你当前本地的 main,覆盖远端 main

也就是把刚才“回退后的状态”同步到远端。

如果你更想“精确控制”,可以指定 commit id

有些人不太喜欢这种“当前分支推上去”的方式,更希望明确写:

👉 我要回到哪个提交

那可以用 commit id。

第一步:查 commit id

最简单:

git log --oneline

比如看到:

070505c github page   ← 这个是你想撤回的
ff775f6 first commit  ← 这个是你要回退到的

👉 记住:你要的是前一个“正确提交”的 id

如果想看得更清楚一点:

git log --oneline --graph --decorate -5

第二步:本地回退到这个 id

git reset --mixed ff775f6

效果:

  • 提交记录回退
  • 代码还在
  • 不在暂存区

如果你希望改动还在暂存区:

git reset --soft ff775f6

第三步:远端也强制回退

git push --force-with-lease origin ff775f6:main

这句的意思很直白:

👉 把远端 main 指向 ff775f6

到这里为止,你得到什么

  • GitHub 上看不到那次错误提交
  • 本地历史也没有
  • 代码还在你本地,可以继续改

这就是很多人想要的“撤回但保留代码”。

那什么时候要用“三段式写法”?

你可能见过这种写法:

git reset --hard <commit>
git push --force-with-lease origin <commit>:main
git cherry-pick --no-commit <某个提交>

这套其实是补救方案,不是常规操作。

它通常用于:

  • 你已经 reset --hard 把代码清掉了
  • 或者你想只恢复某一次提交的内容

正常情况下(尤其是刚提交就反悔),用不到这么重。

为什么不推荐用 git revert

很多教程会说用:

git revert

但它做的事情是:

新增一个“反向提交”

也就是说:

  • 原来的错误提交还在
  • 只是多了一次“撤销它”的提交

如果你的目标是:

👉 让这次提交彻底从历史里消失

那就不要用 revert

一个很现实的问题:这操作有风险吗?

有,而且必须说清楚。

因为你用了:

git push --force-with-lease

这叫改写历史

风险 1:可能覆盖别人的提交

如果你 push 之前:

👉 别人已经往 main 提交了新代码

那你这一推,有可能把对方的提交顶掉。

风险 2:别人本地会“乱掉”

你改了远端历史之后:

  • 别人本地还是旧历史
  • pull / push 可能冲突
  • 甚至把你删掉的提交再带回来

怎么尽量安全一点

几个简单建议:

1. 尽量别在多人共用分支乱搞

尤其是 main 正在被多人提交的时候。

2. 一定用这个

git push --force-with-lease

而不是:

git push --force

前者至少会帮你检查远端有没有被别人改过。

3. 操作前看一眼远端

git fetch origin
git log --oneline --graph --decorate --all -10

4. 如果已经被别人用了,别改历史

这种时候更建议:

git revert

最后给你一个记忆版本

如果你只是:

👉 “刚 push,想撤回,但代码要留着”

记这一套就够了:

git reset HEAD~1
git push --force-with-lease origin main

如果你想完全可控(明确回到哪个点):

git log --oneline
git reset --mixed <commit-id>
git push --force-with-lease origin <commit-id>:main

总结一下

这件事本质其实就一句话:

 删的是提交记录,不是代码内容。

理解这一点,Git 基本就通了。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 怎样写commit log记录及如何提交有哪些约定

    怎样写commit log记录及如何提交有哪些约定

    这篇文章主要为大家介绍了怎样写commit log记录以及及如何提交有哪些约定,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • ChatGPT如何写好Prompt编程示例详解

    ChatGPT如何写好Prompt编程示例详解

    这篇文章主要为大家介绍了ChatGPT如何写好Prompt编程示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • git使用教程(最详细、最傻瓜)

    git使用教程(最详细、最傻瓜)

    这篇文章主要介绍了git使用教程(最详细、最傻瓜),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • 图片的色彩空间问题

    图片的色彩空间问题

    不知有多少朋友遇到此类问题:在PS里处理好的图,发到论论坛上以后发现图片颜色大变,变得灰蒙蒙,失去了层次,色彩生硬,还有点发青
    2014-05-05
  • git分支或指定文件回退到指定版本命令详解

    git分支或指定文件回退到指定版本命令详解

    作为一名后端开发,相信大家一定遇到过这样的情景,代码开发人员过多,并且开发分支过多,导致代码版本管理困难,这样就难免遇到一些代码合并出错,下面这篇文章主要给大家介绍了关于git分支或指定文件回退到指定版本命令的相关资料,需要的朋友可以参考下
    2023-12-12
  • htaccess语法教程

    htaccess语法教程

    前些天不小心删除了原来的博客系统,问过godaddy的客服,恢复数据需要150美元,另外还需要提供不少信息,我于是放弃,注册了这个nunumick.me,打算从头再来。
    2011-09-09
  • Git多仓库提交用户信息动态设置实现方式

    Git多仓库提交用户信息动态设置实现方式

    本文介绍了在日常开发中,当需要同时管理多个远程仓库(如GitHub、Gitee、GitLab)并每个仓库使用不同的邮箱和用户名时,的操作步骤,通过修改.gitconfig配置文件,可以动态设置不同仓库使用不同的用户名和邮箱,从而避免频繁切换邮箱的的繁琐过程
    2026-04-04
  • Git打标签从本地创建到远端推送的详细流程

    Git打标签从本地创建到远端推送的详细流程

    在软件开发中,Git标签(Tag)是为发布版本、标记里程碑量身定制的“快照锚点”,它能永久记录项目历史中的关键节点,然而,仅创建本地标签往往不够,如何将其高效地推送到远程仓库以实现团队共享,是许多开发者会遇到的实际问题,本文给大家介绍了Git打标签的完整流程
    2025-09-09
  • git rebase -i合并多次提交的实现

    git rebase -i合并多次提交的实现

    这篇文章主要介绍了git rebase -i合并多次提交的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • gitlab分支合并冲突的处理过程

    gitlab分支合并冲突的处理过程

    这篇文章主要介绍了gitlab分支合并冲突的处理过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01

最新评论