git 版本回退(reset&revert)

当我们项目发布上线发现有问题,又无法立马解决,需要版本回退的时候,应该如何处理,选择revert还是reset。最怕版本回退有冲突,经历几次及测试以后,终于弄清楚他们之间的差别,下面就简单来说一下他们的使用方法及差别

reset

首先我们提交三次代码:

git提交三次

页面代码如下:

git三次提交内容

现在执行reset命令,把代码回退到4/7第2次提交之前的状态,命令如下:

git reset --hard HEAD^
reset命令
  • 执行命令以后,我们发现上一次修改的内容已经丢失,我们再通过命令git log --oneline看一下提交的历史记录
reset提交记录被删除
  • 我们看到,第3次提交的历史信息也被删除了,并且HEAD当前处于我们要回退的版本,所以执行git reset命令,其实做了3步操作:
    1:本地代码回退到指定的版本;
    2:HEAD移到指定的版本;
    3:移除回退版本之前的所有记录;

  • 按照理论,这个时候我们需要把本地的代码,再提交一次,然后发布,才可以达到版本回退的效果,命令如下:

git commit -a -m"reset以后提交"
git push
gitPush
  • 但是命令行却提示,有冲突,需要我们执行命令git pull拉取一下代码,这样一步也说明了git reset命令重置的只是本地的代码,远程的代码并没有改变,按照说明,我们再次执行git pull

    reset代码恢复

  • 当我们拉取代码以后,线上的代码,又覆盖了我们本地的代码,这样下来,我们貌似无法达到线上代码回退的效果。那我们换一种方式,用强制推送到远程的方式去覆盖线上的代码试试,命令行如下:

 git push -f
force强推
  • 貌似公司有限制,禁止这样推送到远程,也就是用reset达到线上的代码版本回退是很难的。为什么呢?因为reset命令,本质上只会重置本地的代码,并会自动重置线上的代码,
    git reset命令还包括一系列参数,这些参数允许你使用最终提交的内容更新本地环境的其他部分。 这些选项包括:

  • hard:重置repository中branch pointer的指向,使用commit的内容填充working directory ,以及重置staging area(暂存区域)。

  • soft:仅重置repository中branch pointer的指向。

  • mixed:(默认值)重置repository中branch pointer的指向。重置staging area(暂存区域)。

使用这些选项在目标环境中非常有用,例如git reset --hard <commit sha1 | reference>。 这会覆盖您尚未提交的任何本地更改。 实际上,它会重置(清除)staging area,并使用使用commit的内容填充working directory 。 在使用hard选项之前,请确保这是您真正想要做的事情,因为该命令会覆盖任何未提交的更改。

revert

同样我们先提交3个版本:

revert之前提交3次

回退到上一个版本,命令行如下:

git revert HEAD
vim进入编辑模式
  • 页面第3次提交的内容已经清除,同时命令行打开了vim,这个时候,我们需要按下键盘的i键,进入编辑模式,输入提交说明如下:
revert说明
  • 说明输入完成以后,按下键盘的Esc键,退出编辑模式,之后再按下:wq退出并保存编辑的内容如下所示:
vim退出
  • 当我们再次按下Enter键的时候,我们就可以看到如下所示的提交信息
revert说明提交成功
  • 那本地的代码已经回退到指定的版本,那我们再用命令git log --oneline看一下提交的记录:
revert提交记录存在
  • 我们看到之前提交的记录(revert提交3次)还存在,并且新增加了一个提交记录,就是我们刚刚输入的版本回退的记录,同时HEAD指向了我们刚刚的提交版本,这就是说明,git revert做的操作是:在当前已有的版本的基础上,新生成一个提交,并不是把通过移动HEAD到之前的版本来达到回退的效果,这样可以保证我们所有提交的记录都是存在,不会丢失。

  • 然后我们就可以执行git push命令,推送代码到远程服务器:

revert成功

通过,亲自操作git resetgit revert我们看到了它们两个的区别,git reset适合回退本地代码,比如,项目我们修改很多以后,发现想回到最开始的版本。而git revert适合,项目上线以后,发现有问题,需要版本回退,这个时候,可以基于之前的版本,再创建一个新的提交,重新发布就可以,而且之前提交的记录都存在,而git reset是重置的意思,当我们执行了这个命令以后,不但代码回退到指定的版本,之前的提交记录也是会给清除,所以git reset一定到慎重使用,因为它会造成不可回退的效果,除非我们知道之前的提交的哈希值才可以。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,837评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,551评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,417评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,448评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,524评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,554评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,569评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,316评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,766评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,077评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,240评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,912评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,560评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,176评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,425评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,114评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,114评论 2 352

推荐阅读更多精彩内容