村长 发表于 2020-12-5 22:13:25

【LSP】如何优雅的进行版本回退


http://cdn.u1.huluxia.com/g4/M01/89/C1/rBAAdl-BsfeACqSDAACt4WdlvYs266.jpg
在版本迭代开发过程中,相信很多人都会有过错误提交的时候(至少良许有过几次这样的体验)。这种情况下,菜鸟程序员可能就会虎驱一震,紧张得不知所措。而资深程序员就会微微一笑,摸一摸锃亮的脑门,然后默默的进行版本回退。

对于版本的回退,我们经常会用到两个命令:

git reset
git revert
那这两个命令有何区别呢?先不急,我们后文详细介绍。

git reset
假如我们的系统现在有如下几个提交:http://cdn.u1.huluxia.com/g4/M01/89/C1/rBAAdl-BsfiAEltsAABFl5OtnLo055.png


其中:A 和 B 是正常提交,而 C 和 D 是错误提交。现在,我们想把 C 和 D 回退掉。而此时,HEAD 指针指向 D 提交(5lk4er)。我们只需将 HEAD 指针移动到 B 提交(a0fvf8),就可以达到目的。

只要有 git 基础的朋友,一定会想到 git reset 命令。完整命令如下:

git reset --hard a0fvf8
命令运行之后,HEAD 指针就会移动到 B 提交下,如下图示:http://cdn.u1.huluxia.com/g4/M01/89/C1/rBAAdl-BsfiAVH42AABLy4cegNw627.png


而这个时候,远程仓库的 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',如下图示:http://cdn.u1.huluxia.com/g4/M01/89/C1/rBAAdl-BsfmANragAABPpJ8_Gfg418.png


这里只有两个提交需要 revert,我们可以一个个回退。但如果有几十个呢?一个个回退肯定效率太低而且容易出错。我们可以使用以下方法进行批量回退:

git revert OLDER_COMMIT^..NEWER_COMMIT
这时,错误的提交 C 和 D 依然保留,将来进行甩锅的时候也有依可循。而且,这样操作的话 HEAD 指针是往后移动的,可以直接使用 git push 命令推送到远程仓库里。而这种做法,正是企业所鼓励的。

我们再举个更难一点的例子。

假如现在有三个提交,但很不巧的是,那个错误的提交刚好位于中间。如下图示:http://cdn.u1.huluxia.com/g4/M01/89/C2/rBAAdl-BsfqAbbukAAA7vKNuMYc229.png


这时,直接使用 git reset 命令将 HEAD 指针重置到 A 提交显然是不行的,因为 C 提交是正确的,需要保留的。先把 C 提交 及 B 批次全部回退,再使用 cherry-pick 命令将 C 提交重新再生成一个新的提交 C'',这样就实现了将 B提交回退的需求。完整的过程如下:http://cdn.u1.huluxia.com/g4/M01/89/C2/rBAAdl-BsfqAIpdmAABYy_t34RU099.png

天镜盗梦 发表于 2020-12-6 07:00:15

支持,楼下的跟上哈~

68079330 发表于 2020-12-6 11:52:22

前排支持下了哦~

千面萌萌 发表于 2020-12-8 11:41:02

广告位,,坐下看看

千百渡 发表于 2020-12-8 15:40:39

这么强,支持楼主,佩服

yichong 发表于 2020-12-8 16:39:26

看看村长这是什么东东

伴我多久 发表于 2020-12-9 12:27:30

众里寻他千百度,蓦然回首在这里!

liqiang24 发表于 2020-12-9 12:51:20

好帖必须得顶起

neige 发表于 2020-12-10 09:38:39

啥玩应呀

梦影 发表于 2020-12-11 16:45:09

我只是路过,不发表意见
页: [1] 2
查看完整版本: 【LSP】如何优雅的进行版本回退

村长黑科技是专业提供项目资源的服务的村长黑科技平台,如合购网赚项目、引流推广软件、软件程序开发等项目就选村长黑科
技平台参与或发布项目定制各种软件就来村长黑科技平台

本站中所有被研究的素材与信息全部来源于互联网,版权争议与本站无关。本站所发布的任何软件的破解分析文章、破解分析视频、补丁、注册机和注册信息,

仅限用于学习和研究软件安全的目的。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。学习破解分析技术是为了更好的完善软件可能存在的不安全因素,提升软件安全意识。所以您如果喜欢某程序,

请购买注册正版软件,获得正版优质服务!不允许将上述内容私自传播、销售或者其他任何非法用途!否则,产生任何法律责任,一切后果请用户自负,与本网站无关!如有侵权或非法用途请举报!请发送到邮箱:cxphj8@foxmail.com

《意见反馈》或《截图指定页面备注》发送到邮件,收到后24小时内删除,禁止用户学习使用关掉用户【学习使用权】!