网站首页 > 技术教程 正文
在版本迭代开发过程中,相信很多人都会有过错误提交的时候(至少良许有过几次这样的体验)。这种情况下,菜鸟程序员可能就会虎驱一震,紧张得不知所措。而资深程序员就会微微一笑,摸一摸锃亮的脑门,然后默默的进行版本回退。
对于版本的回退,我们经常会用到两个命令:
- git reset
- git revert
那这两个命令有何区别呢?先不急,我们后文详细介绍。
git reset
假如我们的系统现在有如下几个提交:
其中:A 和 B 是正常提交,而 C 和 D 是错误提交。现在,我们想把 C 和 D 回退掉。而此时,HEAD 指针指向 D 提交(5lk4er)。我们只需将 HEAD 指针移动到 B 提交(a0fvf8),就可以达到目的。
只要有 git 基础的朋友,一定会想到 git reset 命令。完整命令如下:
git reset --hard a0fvf8
命令运行之后,HEAD 指针就会移动到 B 提交下,如下图示:
而这个时候,远程仓库的 HEAD 指针依然不变,仍在 D 提交上。所以,如果直接使用 git push 命令的话,将无法将更改推到远程仓库。此时,只能使用 -f 选项将提交强制推到远程仓库:
git push -f
采用这种方式回退代码的弊端显而易见,那就是会使 HEAD 指针往回移动,从而会失去之后的提交信息。将来如果突然发现,C 和 D 是多么绝妙的想法,可它们已经早就消失在历史的长河里了。
而且,有些公司(比如良许的公司)明令禁止使用 git reset 命令去回退代码,原因与上述一样。所以,我们需要找到一个命令,既可以回退代码,又可以保存错误的提交。这时,git revert 命令就派上用场了。
git revert
git revert的作用通过反做创建一个新的版本,这个版本的内容与我们要回退到的目标版本一样,但是HEAD指针是指向这个新生成的版本,而不是目标版本。
使用 git revert 命令来实现上述例子的话,我们可以这样做:先 revert D,再 revert C (有多个提交需要回退的话需要由新到旧进行 revert):
git revert 5lk4er
git revert 76sdeb
这里会生成两个新有提交:D' 和 C',如下图示:
这里只有两个提交需要 revert,我们可以一个个回退。但如果有几十个呢?一个个回退肯定效率太低而且容易出错。我们可以使用以下方法进行批量回退:
git revert OLDER_COMMIT^..NEWER_COMMIT
这时,错误的提交 C 和 D 依然保留,将来进行甩锅的时候也有依可循。而且,这样操作的话 HEAD 指针是往后移动的,可以直接使用 git push 命令推送到远程仓库里。而这种做法,正是企业所鼓励的。
我们再举个更难一点的例子。
假如现在有三个提交,但很不巧的是,那个错误的提交刚好位于中间。如下图示:
这时,直接使用 git reset 命令将 HEAD 指针重置到 A 提交显然是不行的,因为 C 提交是正确的,需要保留的。先把 C 提交 及 B 批次全部回退,再使用 cherry-pick 命令将 C 提交重新再生成一个新的提交 C'',这样就实现了将 B提交回退的需求。完整的过程如下:
> 2020 精选 阿里/腾讯等一线大厂 面试、简历、进阶、电子书 「**良许Linux**」后台回复「**资料**」免费获取
#### 看完的都是真爱,点个赞再走呗?您的「三连」就是良许持续创作的最大动力!
1. 关注**原创**「**良许Linux**」,第一时间获取最新Linux干货!
2. 后台回复【资料】【面试】【简历】获取精选一线大厂面试、自我提升、简历等资料。
3. 关注我的博客:[lxlinux.net](http://www.lxlinux.net)
- 上一篇: 提交代码:git push 命令的四种形式
- 下一篇: 如果你还不会用git回滚代码,那你一定要来看看
猜你喜欢
- 2024-10-27 git安装使用 git的安装流程
- 2024-10-27 代码即将上线,突然有个中间提交不能发布!怎么办?
- 2024-10-27 git 将本地还原至某次提交 git还原到指定版本
- 2024-10-27 git reset 和 git rever 实践 git的reset
- 2024-10-27 这有一份 Git 日常使用清单,你需要吗?
- 2024-10-27 Git教学篇2-git日常操作之git clone与git tag
- 2024-10-27 git clone切换分支步骤,代理设置,作者信息设置
- 2024-10-27 Git 高级用法,喜欢就拿去用 git常用
- 2024-10-27 Git 必知必会《续》 git hint
- 2024-10-27 git的使用 git基本用法
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- sd分区 (65)
- raid5数据恢复 (81)
- 地址转换 (73)
- 手机存储卡根目录 (55)
- tcp端口 (74)
- project server (59)
- 双击ctrl (55)
- 鼠标 单击变双击 (67)
- debugview (59)
- 字符动画 (65)
- flushdns (57)
- ps复制快捷键 (57)
- 清除系统垃圾代码 (58)
- web服务器的架设 (67)
- 16进制转换 (69)
- xclient (55)
- ps源文件 (67)
- filezilla server (59)
- 句柄无效 (56)
- word页眉页脚设置 (59)
- ansys实例 (56)
- 6 1 3固件 (59)
- sqlserver2000挂起 (59)
- vm虚拟主机 (55)
- config (61)
本文暂时没有评论,来添加一个吧(●'◡'●)