news 2026/8/12 19:16:39

12-丢弃提交的内容

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
12-丢弃提交的内容

reset --hard 丢弃最新提交

有的时候,刚提交的commit内容写得实在太烂,连自己的都看不下去,与其修改它还不如丢掉重写。这种情况,就可以用reset来丢弃最新的提交。

比如你刚写了一部分内容并作了commit

写完后回头看了看,你觉得「不行,得重新写」。此时就可以用reset --hard来撤销这条commit

git reset --hard HEAD^

HEAD^表示往回数一个位置的commit

因为需要撤销最新的一个commit,所以就是要恢复到它的父commit,也就是HEAD^。那么在执行上述命令之后,最新一条commit就被撤销了:

不过,就像图上显示的,被撤销的那个commit并没有消失,只是你不再用到它了。如果你在撤销它之前记下了它的SHA-1码,你还是可以通过SHA-1来找到它的。

假如有一个commit,你刚写完的时候并没有觉得它不好,可是在几次提交以后,你突然灵光一现:「哎呀,那个commit不该写,我要撤销!」

不是最新的提交,就不能用reset --hard来撤销了。这种情况的撤销,就要用之前介绍过的一个指令:交互式rebaserebase -i

用交互式 rebase 撤销提交

之前介绍过,交互式rebase可以用来修改某些旧的commits。其实除了修改提交,它还可以用于撤销提交。比如下面这种情况:

你想撤销倒数第二条commit,那么可以使用rebase -i

git rebase -i HEAD^^

然后就会跳到commit序列的编辑界面,这个在之前已经介绍过,你需要修改这个序列来进行操作。不过不同的是,之前讲的修正commit的方法是把要修改的commit左边的pick改成edit,而如果你要撤销某个commit,做法就更加简单粗暴一点:直接删掉这一行就好。

pick的直接意思是「选取」,在这个界面的意思就是应用这个commit。而如果把这一行删掉,那就相当于在rebase的过程中跳过了这个commit,也就是把这个commit撤销掉了。

现在再看log,就会发现之前的倒数第二条commit已经不在了。

git log

用 rebase --onto 撤销提交

除了用交互式rebase,你还可以用rebase --onto来更简便地撤销提交。rebase加上--onto选项之后,可以指定rebase的「起点」。

一般的rebase,告诉 Git 的是「我要把当前commit以及它之前的commits重新提交到目标commit上去,这其中,rebase的「起点」是自动判定的:选取当前commit和目标commit在历史上的交叉点作为起点。

例如下面这种情况:

如果在此时执行rebase,那么 Git 会自动选取branch1分支ce78a3main分支3f5ecd的历史交叉点c379097作为rebase的起点,依次将branch1分支的a5b4e2ce78a3重新提交到3f5ecd的提交路径上去。

git rebase 3f5ecd

执行rebase操作之后的提交历史变成下图所示:

注意结果图也说明了rebase操作会改变commit的 SHA-1 值

--onto参数,就可以额外给rebase指定它的起点。例如以下图所示,如果我只想把5提交到3上,不想附带上4,那么我可以执行:

git rebase --onto 第3个commit 第4个commit branch1

--onto参数后面有三个附加参数:目标commit、起点commit(注意:rebase会把起点排除在外)、终点commit。所以上面这行指令就会从4往下数,拿到branch1所指向的5,然后把5重新提交到3上去。

同样的,你也可以用rebase --onto来撤销提交:

git rebase --onto HEAD^^ HEAD^ branch1

上面这行代码的意思是:以倒数第二个commit为起点(注意起点不包含在rebase序列中),branch1为终点,rebase到倒数第三个commit上。

也就是这样:

小结

一、撤销最新的提交,方式是通过git reset --hard 目标commit

二、撤销过往的提交,方法有两种:

  1. git rebase -i在编辑界面中删除想撤销的commits;
  2. git rebase --ontorebase命令中直接剔除想撤销的commits。

两种方法理念是一样的:在rebase的过程中去掉想撤销的commit,让他它消失在历史中。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/12 19:15:27

3D模型局部变形技术:从顶点操作到面部网格塑形实战

大家好,我是专注于技术分享的博主。今天我们来聊聊一个在计算机图形学、游戏开发和3D建模领域非常核心的概念—— 面部网格变形与顶点操作 。听起来有点抽象?别急,我们可以用一个非常形象的比喻来理解:就像医美领域的“鼻基底填…

作者头像 李华
网站建设 2026/8/12 19:14:41

满洲里建设局网站:揭秘边疆城市数字化转型背后的民生温度与治理智慧

站在祖国北部边境,当寒风掠过满洲里那片辽阔的草原,人们往往首先想到的是那座红砖砌成的火车站,或是中俄边境口岸车水马龙的热闹景象。然而,在这座充满异域风情与贸易活力的城市背后,有一群默默耕耘的人,他们不直接面对游客,却时刻关注着城市的每一块砖瓦、每一条道路、…

作者头像 李华
网站建设 2026/8/12 19:14:19

mysql数据库,明明有索引为啥不用

为什么全表扫比走索引更划算走索引不是免费的,是要付 3 笔账:1.回表 IO:BTree 定位到主键后,要再去聚簇索引取整行数据2.随机 IO:BTree 叶子节点物理位置是分散的,每次回表是 4KB 随机读3.二级索引读&#…

作者头像 李华
网站建设 2026/8/12 19:11:57

深圳网站建设哪家强?深度解析易通鼎如何以真诚服务与企业共赢未来

本文关键词:深圳网站建设 易通鼎在深圳这座充满活力的城市里,每天早晨的闹钟响起,无数个创业者、企业主和团队开始了一天的忙碌。高楼大厦的玻璃幕墙反射着初升的太阳,地铁口涌动着匆忙的身影,写字楼里的键盘敲击声此起彼伏。这是一个梦想与现实激烈碰撞的地方,也是一个机…

作者头像 李华
网站建设 2026/8/12 19:10:13

AI技能调用新范式:索引+按需读取机制详解与工程实践

1. 项目概述:从“索引”到“技能”的智能调用革命 最近在折腾AI应用开发,特别是围绕像Claude、GPT这类大语言模型构建智能体(Agent)时,一个核心痛点越来越明显:如何让AI精准、高效地调用我们为它准备的“技…

作者头像 李华
网站建设 2026/8/12 19:09:19

基于WASM与IPC桥接的零侵入Electron应用可观测性SDK设计

1. 从一次线上故障说起:为什么Electron应用的可观测性是个“老大难”问题? 去年,我们团队负责的一个大型桌面应用(基于Electron)在版本更新后,遭遇了一次诡异的线上故障。用户反馈应用在特定操作下会“卡死…

作者头像 李华