1.软文推荐

2.软文推荐

3.软文推荐

使用git开发的过程中,存在误提交的时候怎么办呢?不用慌张,强大的git提供了多种回退的方式,可以让你恢复提交之前的内容,下面为大家分别介绍一些具体使用方法。

git reset

假如我们的系统现在有如下几个提交:

如何使用Git 优雅的版本回退呢?如何使用Git 优雅的版本回退呢?

Git如何优雅的进行版本回退?

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

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

git reset --hard a0fvf8

命令运行之后,HEAD 指针就会移动到 B 提交下,如下图示:

如何使用Git 优雅的版本回退呢?如何使用Git 优雅的版本回退呢?

Git如何优雅的进行版本回退?

而这个时候,远程仓库的 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’,如下图示:

如何使用Git 优雅的版本回退呢?如何使用Git 优雅的版本回退呢?

Git如何优雅的进行版本回退?

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

git revert OLDER_COMMIT^..NEWER_COMMIT

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

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

假如现在有三个提交,但很不巧的是,那个错误的提交刚好位于中间。如下图示:

如何使用Git 优雅的版本回退呢?如何使用Git 优雅的版本回退呢?

Git如何优雅的进行版本回退?

这时,直接使用 git reset 命令将 HEAD 指针重置到 A 提交显然是不行的,因为 C 提交是正确的,需要保留的。先把 C 提交 及 B 提交全部回退,再使用 cherry-pick 命令将 C 提交重新再生成一个新的提交 C”,这样就实现了将 B提交回退的需求。完整的过程如下:

如何使用Git 优雅的版本回退呢?如何使用Git 优雅的版本回退呢?

Git如何优雅的进行版本回退?

通过以上对比可以发现,git reset 与 git revert 最大的差别就在于,git reset 会失去后面的提交,而 git revert 是通过反做的方式重新创建一个新的提交,而保留原有的提交。在企业里,应尽量使用 git revert 命令,能不用 git reset 命令尽量不用。

本文来源:www.lxlinux.net/4732.html,若引用不当,请联系修改。

相关文章 8

1

RHEL 配置 RAID 1具体方法 1分钟前

RAID 1通过磁盘数据镜像实现数据冗余,在成对的独立磁盘上产生互 为备份的数据。当原始数据繁忙时,可直接从镜像拷贝中读取数据,因此...

2

宝塔防火墙是怎么回事?宝塔nginx/apache防火墙的作用(宝塔防火墙怎么样) 4分钟前

宝塔防火墙是怎么回事? nginx防火墙是宝塔面板中的一个服务器安全插件。 宝塔面板是目前市面上服务器管理行业最常用的服务器管理面板...

3

这几个小工具也太好用了! 6分钟前

今天给大家推荐几个我私藏的平时工作学习爱用的小工具。 hexed.it 十六进制编辑器相信大家不会陌生,尤其是网络安全行业的同学,经常会...

4

极光KVM:美国洛杉矶高防CN2 GIA VPS月付32元,美西BGP直连月均10元(极光KVM) 8分钟前

极光KVM(yunserver.com)新推出了九月开学季优惠,本次针对美国洛杉矶高防、洛杉矶BGP、洛杉矶双程CN2及香港CMI大带宽套餐全部都有优惠,美...

5

Python搭建http服务器具体方法 9分钟前

David Wheeler有一句名言:计算机科学中的任何问题,都可以通过加上另一层间接的中间层解决。为了提高Python网络服务的可移植性,Python社区...

6

HostHatch VPS洛杉矶机房综合评测(hostus vps) 11分钟前

HostHatch成立于2011年美国主机提供商,目前主要提供KVM SSD、OpenVZ SSD以及KVM Storage三大类VPS主机,数据中心有美国机房、香港机房(香港VPS)、...

7

如何使用Linux 上的 Chromebook 11分钟前

Chromebook是Google推出的网络笔记本,是利用谷歌系统Chrome OS系统研发的笔记本电脑,基于Chrome浏览器及Linux内核的操作系统。这是一种全新的...

8

速云:广州移动/深圳移动/广东联通/香港HKT等VDS,9折优惠,最低月付9元;深圳独立服务器 14分钟前

速云怎么样? 速云,国人商家,提供广州移动、深圳移动、广州茂名联通、香港hkt等VDS和独立服务器。现在暑期限时特惠,力度大。广州移...